add calc function using rotation matrices

This commit is contained in:
util1 2019-07-21 17:21:08 +02:00
parent c70a4b49d5
commit 985071ab7f
3 changed files with 34 additions and 28 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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();