diff --git a/src/FxEngine/FxEngine.h b/src/FxEngine/FxEngine.h index 3cdcb64..4b4f7a5 100644 --- a/src/FxEngine/FxEngine.h +++ b/src/FxEngine/FxEngine.h @@ -4,7 +4,7 @@ #include "math/pos.h" #include "math/angle.h" -extern float FE_dh,FE_dv,FE_roulis; +extern double FE_dh,FE_dv,FE_roulis; extern FE_Position FE_user={0,0,0}; void FE_new_frame(); // calls move function diff --git a/src/FxEngine/math/coord.c b/src/FxEngine/math/coord.c index 216272a..729862a 100644 --- a/src/FxEngine/math/coord.c +++ b/src/FxEngine/math/coord.c @@ -1,6 +1,5 @@ #include "coord.h" - -#include "angle.h" +#include "functions.h" static float matrice[4][4]= { @@ -10,37 +9,44 @@ static float matrice[4][4]= {0,0,0,1} }; -void FE_calc() +void FE_calc(const FE_point& point) { - transformed=original-real; - // rotate + static FE_position temp + { + point.real.x - FE_user.x, + point.real.y - FE_user.y, + point.real.z - FE_user.z + }; + point.transformed.x = matrice[0][0]*temp.x + matrice[0][1]*temp.y + matrice[0][2]*temp.z; + point.transformed.y = matrice[1][0]*temp.x + matrice[1][1]*temp.y + matrice[1][2]*temp.z; + point.transformed.z = matrice[2][0]*temp.x + matrice[2][1]*temp.y + matrice[2][2]*temp.z; } -void FE_set_matrice(float dh, float dv, float roulis) +void FE_set_matrice() { - const float A=cos(dh), B=sin(dh); - const float C=cos(dv), D=sin(dv); - const float E=cos(roulis), F=sin(roulis); + const double A=FE_cos(FE_dh), B=FE_sin(FE_dh); + const double C=FE_cos(FE_dv), D=FE_sin(FE_dv); + const double E=FE_cos(FE_roulis), F=FE_sin(FE_roulis); - const float AD=A*D, BC=B*C; + const double AD=A*D, BC=B*C; matrice[0][0]=C*E; - matrice[1][0]=-C*F; - matrice[2][0]=D; - //matrice[3][0]=0; - - matrice[0][1]=BC*E+A*F; - matrice[1][1]=-BD*F+A*E; - matrice[2][1]=-B*C; - //matrice[3][1]=0; - - matrice[0][2]=-AD*E+B*F; - matrice[1][2]=AD*F+B*E; - matrice[2][2]=A*C; - //matrice[3][2]=0; - + matrice[0][1]=-C*F; + matrice[0][2]=D; //matrice[0][3]=0; + + matrice[1][0]=BC*E+A*F; + matrice[1][1]=-BD*F+A*E; + matrice[1][2]=-B*C; //matrice[1][3]=0; - //matrice[2][3]=0; + + matrice[2][0]=-AD*E+B*F; + matrice[2][1]=AD*F+B*E; + matrice[2][2]=A*C; + //matrice[2][2]=0; + + //matrice[3][0]=0; + //matrice[3][1]=0; + //matrice[3][2]=0; //matrice[3][3]=1; } \ No newline at end of file diff --git a/src/FxEngine/math/coord.h b/src/FxEngine/math/coord.h index ee07032..c5e23d6 100644 --- a/src/FxEngine/math/coord.h +++ b/src/FxEngine/math/coord.h @@ -14,8 +14,8 @@ struct FE_point FE_position real,translated; }; -void FE_calc(const FE_coord& coord); -void FE_set_matrice(float dh, float dv, float roulis); +void FE_calc(const FE_point& point); +void FE_set_matrice();