_tilt_yaw=0;
_tilt_roll=0;
_tilt_pitch=0;
+ _old_tilt_roll=0;
+ _old_tilt_pitch=0;
+ _old_tilt_yaw=0;
_min_tilt_yaw=0;
_min_tilt_pitch=0;
_min_tilt_roll=0;
_omega=_omegan*_omegarel;
_ddt_omega=_omegan*ddt_omegarel;
int i;
- updateDirectionsAndPositions();
+ float drot[3];
+ updateDirectionsAndPositions(drot);
+ Math::add3(rot,drot,drot);
for(i=0; i<_rotorparts.size(); i++) {
float s = Math::sin(float(2*pi*i/_number_of_parts+(_phi-pi/2.)*(_ccw?1:-1)));
float c = Math::cos(float(2*pi*i/_number_of_parts+(_phi-pi/2.)*(_ccw?1:-1)));
Rotorpart* r = (Rotorpart*)_rotorparts.get(i);
r->setOmega(_omega);
r->setDdtOmega(_ddt_omega);
- r->inititeration(dt,rot);
+ r->inititeration(dt,drot);
r->setCyclic(_cyclicail*c+_cyclicele*s);
}
}
-void Rotor::updateDirectionsAndPositions()
+void Rotor::updateDirectionsAndPositions(float *rot)
{
if (!_directions_and_postions_dirty)
+ {
+ rot[0]=rot[1]=rot[2]=0;
return;
+ }
+ rot[0]=_old_tilt_roll-_tilt_roll;
+ rot[1]=_old_tilt_pitch-_tilt_pitch;
+ rot[2]=_old_tilt_yaw-_tilt_yaw;
+ _old_tilt_roll=_tilt_roll;
+ _old_tilt_pitch=_tilt_pitch;
+ _old_tilt_yaw=_tilt_yaw;
float orient[9];
euler2orient(_tilt_roll, _tilt_pitch, _tilt_yaw, orient);
float forward[3];
rps[(i-_number_of_parts/4+_number_of_parts)%_number_of_parts],
rps[(i+_number_of_parts/4)%_number_of_parts]);
}
- updateDirectionsAndPositions();
+ float drot[3];
+ updateDirectionsAndPositions(drot);
for (i=0;i<_number_of_parts;i++)
{
rps[i]->setCompiled();
float _tilt_yaw;
float _tilt_roll;
float _tilt_pitch;
+ float _old_tilt_roll;
+ float _old_tilt_pitch;
+ float _old_tilt_yaw;
public:
Rotor();
void setName(const char *text);
void inititeration(float dt,float omegarel,float ddt_omegarel,float *rot);
void compile();
- void updateDirectionsAndPositions();
+ void updateDirectionsAndPositions(float *rot);
void getTip(float* tip);
void calcLiftFactor(float* v, float rho, State *s);
void getDownWash(float *pos, float * v_heli, float *downwash);