#include <math.h>
//-----------------------------------------------
double F_x = 25.7;
double F_y = 66.3;
//-----------------------------------------------
double F_xa;
double F_ya;
//-----------------------------------------------
double E_xc;
double E_yc;
//-----------------------------------------------
double AB = 30.0;
double BE = 30.0;
double EF = 55.0;
double BF = sqrt(5575);
double AF;
double AE;
//-----------------------------------------------
double CD = 30.0;
double DE = 30.0;
double CE;
//-----------------------------------------------
double FBE;
double BAF;
double BFA;
double BAE;
double TE;
double O1;
double alph;
//-----------------------------------------------
double ECD;
double beta;
//-----------------------------------------------
double val1;
double val2;
//-----------------------------------------------
void Degree_proc(void) {
val1 = PI / 180.0;
val2 = 180.0 / PI;
}
//-----------------------------------------------
void FBE_proc(void) {
FBE = acos( ( pow( BF, 2) + pow( BE, 2) - pow( EF, 2) ) / ( 2 * BF * BE ) ) * val2;
}
//-----------------------------------------------
void Fpoint_proc(void) {
F_xa = F_x + 6;
F_ya = F_y;
Serial.printf("(%f,%f)||(%f,%f)\n", F_x, F_y, F_xa, F_ya);
}
//-----------------------------------------------
void BAF_proc(void) {
AF = sqrt( pow( F_xa, 2) + pow( F_ya, 2) );
BAF = acos( ( pow( AB, 2) + pow( AF, 2) - pow( BF, 2) ) / ( 2 * AF * AB ) ) * val2;
BFA = acos( ( pow( BF, 2) + pow( AF, 2) - pow( AB, 2) ) / ( 2 * BF * AF ) ) * val2;
O1 = BAF + BFA;
BAE = ( O1 + FBE ) / 2;
AE = 2 * AB * cos( BAE * val1 );
}
//-----------------------------------------------
void alph_proc(void) {
if( F_xa > 0 ) {
alph = 180.0 - ( atan( F_ya / F_xa ) * val2 + BAF );
}
else if( F_xa == 0 ) {
alph = 90.0 - BAF;
}
else if( F_xa < 0 ) {
alph = ( -atan( F_ya / F_xa ) * val2 ) - BAF;
}
TE = 180.0 - (alph + BAE);
E_xc = AE * cos( TE * val1 ) - 12.0;
E_yc = AE * sin( TE * val1 );
}
void beta_proc(void) {
CE = sqrt( pow( E_xc, 2) + pow( E_yc, 2) );
ECD = acos( ( pow( CE, 2) + pow( CD, 2) - pow( DE, 2) ) / ( 2 * CE * CD ) ) * val2;
if( E_xc < 0 ) {
beta = ( 180.0 + atan( E_yc / E_xc ) * val2 ) - ECD;
}
else if( E_xc == 0 ) {
beta = 90.0 - ECD;
}
else if( E_xc > 0 ) {
beta = atan( E_yc / E_xc ) * val2 - ECD;
}
}
//-----------------------------------------------
//-----------------------------------------------
void setup() {
Serial.begin(115200);
Degree_proc();
FBE_proc();
Fpoint_proc();
BAF_proc();
alph_proc();
beta_proc();
Serial.printf("alph=%f,beta=%f\n", alph, beta);
}
void loop() {
}