- UID
- 42
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
发表于 2013-6-27 11:12:13
|
显示全部楼层
HoneyFox 发表于 2013-6-27 10:26
没看懂,你用伪代码方式描述一下吧。。。
其实所谓的震动就是因为没有一个误差容忍值导致的。。。我上个学期有一次的作业就是用JAVA写一个火箭着陆的游戏。。。我在里面就写了一个类似SAS的代码。。。当然简陋的多。。。只需要考虑左右方向就行了,简单的说就是本身速度方向往左就往右加速,反之亦然。但是我当时就忘记了留下误差容忍量,结果当速度恰好跨越了两侧(比方说速度是0.1但SAS一次要走0.2,于是不管怎么调整要么是+0.1要么是-0.1)的时候就会震动。
float n = SAS// n 就是实际监测到的误差,SAS当然就是指传感器信息
float k = 1.0 // 误差容忍的阈值
float gx,gy,gz,g //重心的三维位置及大小
float tx,ty,tz ,th//推力的三维位置及大小
float lx,ly,lz ,l//升力的三维位置及大小
timer t = new timer 1000// 一个1秒的计时器
TimeEventListener (t) //每秒(我记得要用Listener,忘了具体代码了)
n=(n+SAS)/2
if(n>k)
{
Thruster //使用RCS或控制翼调整姿态
}
else if(k>0.001){
k=k/2 //当没有达到预期的精度时,减小阈值,提高精度
}
else{
- -我不会算,就是根据重力、推力和升力三者的大小和位置关系,计算出在哪个翼面位子上能保持稳定。毕竟KSP里没有风向的问题而且很多地方都是理想物理模型,这个算起来应该不难。 这个不要也没太大关系- -
}
Thruster部分
float Vx Vy Vr //纵轴、横轴和滚动的监测数据。最终目的当然是让它小于预定的误差容忍值
float p = 1.0//使用多少的力量来进行微调
p = main.k//把p和误差容忍值K挂钩,需要调节的精度越高,每次调节用的力量越小。避免出现我说的那种调节量超过误差的情况- -
|
|