]> git.mxchange.org Git - flightgear.git/blob - src/FDM/YASim/Rotorpart.hpp
Giant helicopter code update from Maik Justus.
[flightgear.git] / src / FDM / YASim / Rotorpart.hpp
1 #ifndef _ROTORPART_HPP
2 #define _ROTORPART_HPP
3
4 namespace yasim {
5     class Rotor;
6     class Rotorpart
7     {
8     private:
9         float _dt;
10         float _last_torque[3];
11         int _compiled;
12     public:
13         Rotorpart();
14
15         // Position of this surface in local coords
16         void setPosition(float* p);
17         void getPosition(float* out);
18         void setCompiled() {_compiled=1;}
19         float getDt() {return _dt;}
20         void setPositionForceAttac(float* p);
21         void getPositionForceAttac(float* out);
22         void setNormal(float* p);
23         void getNormal(float* out);
24         void setCollective(float pos);
25         void setCyclic(float pos);
26         void getLastTorque(float *t)
27             {for (int i=0;i<3;i++) t[i]=_last_torque[i];}
28         void getAccelTorque(float relaccel,float *t);
29         void setSpeed(float* p);
30         void setDirectionofZentipetalforce(float* p);
31         void setDirectionofRotorPart(float* p);
32         void setZentipetalForce(float f);
33         void setMaxpitch(float f);
34         void setMinpitch(float f);
35         void setMaxcyclic(float f);
36         void setMincyclic(float f);
37         void setDelta3(float f);
38         void setDynamic(float f);
39         void setTranslift(float f);
40         void setC2(float f);
41         void setZentForce(float f);
42         void setRelLenHinge(float f);
43         void setRelamp(float f);
44         void setDiameter(float f);
45         float getAlpha(int i);
46         float getrealAlpha(void);
47         char* getAlphaoutput(int i);
48         void setAlphaoutput(char *text,int i);
49         void inititeration(float dt,float *rot);
50         float getWeight(void);
51         void setWeight(float value);
52         void calcForce(float* v, float rho, float* forceOut, float* torqueOut,
53             float* torque_scalar);
54         float calculateAlpha(float* v, float rho, float incidence, float cyc,
55             float alphaalt, float *torque,float *returnlift=0);
56         void setlastnextrp(Rotorpart*lastrp,Rotorpart*nextrp,
57             Rotorpart *oppositerp);
58         void setTorque(float torque_max_force,float torque_no_force);
59         void setOmega(float value);
60         void setOmegaN(float value);
61         void setDdtOmega(float value);
62         float getIncidence();
63         float getPhi();
64         void setAlphamin(float f);
65         void setAlphamax(float f);
66         void setAlpha0(float f);
67         void setAlpha0factor(float f);
68         void setLen(float value);
69         void setParameter(char *parametername, float value);
70         void setRotor(Rotor *rotor);
71         void setTorqueOfInertia(float toi);
72
73     private:
74         void strncpy(char *dest,const char *src,int maxlen);
75         Rotorpart *_lastrp,*_nextrp,*_oppositerp;
76         Rotor *_rotor;
77
78         float _pos[3];    // position in local coords
79         float _posforceattac[3];    // position in local coords
80         float _normal[3]; //direcetion of the rotation axis
81         float _torque_max_force;
82         float _torque_no_force;
83         float _speed[3];
84         float _direction_of_movement[3];
85         float _directionofzentipetalforce[3];
86         float _directionofrotorpart[3];
87         float _zentipetalforce;
88         float _maxpitch;
89         float _minpitch;
90         float _maxcyclic;
91         float _mincyclic;
92         float _cyclic;
93         float _collective;
94         float _delta3;
95         float _dynamic;
96         float _translift;
97         float _c2;
98         float _mass;
99         float _alpha;
100         float _alphaalt;
101         float _alphamin,_alphamax,_alpha0,_alpha0factor;
102         float _rellenhinge;
103         float _relamp;
104         float _omega,_omegan,_ddt_omega;
105         float _phi;
106         float _len;
107         float _incidence;
108         float _twist; //outer incidence = inner inner incidence + _twist
109         int _number_of_segments;
110         float _rel_len_where_incidence_is_measured;
111         float _rel_len_blade_start;
112         float _rel_len_blade_measured;
113         float _diameter;
114         float _torque_of_inertia;
115         float _torque; 
116         // total torque of rotor (scalar) for calculating new rotor rpm
117         char _alphaoutputbuf[2][256];
118         int _alpha2type;
119     };
120
121 }; // namespace yasim
122 #endif // _ROTORPART_HPP