Library to calculate angles from positions and vice versa (also used for shooting angles)
Dependents: includeair includeair calcul_Ueff2 Mesure_energie
angleandposition.cpp
- Committer:
- Gerth
- Date:
- 2015-10-19
- Revision:
- 1:6cace9fdb088
- Parent:
- 0:b8295c4b5793
- Child:
- 2:b99fef8df97e
File content as of revision 1:6cace9fdb088:
#include "angleandposition.h" #include "mbed.h" #include "math.h" const double bar1 = 260; // length bar 1 [mm] const double bar2 = 342; // length bar 2 [mm] const double base_spacing = 105.59; // spacing between the DC-motors [mm] const double pi = 3.1415926535897; double virt_bar_ref = sqrt(pow(bar2,2)- pow(bar1,2)); angleandposition::angleandposition(void) { } float angleandposition::positiontoangle1(float x_position, float y_position)//rigth arm { double virt_bar_right = sqrt( pow(x_position-0.5*base_spacing,2) + pow(y_position,2) ); double d2_square = pow(bar1,2) - pow( ( pow(virt_bar_right,2) + pow(bar1,2) - pow(bar2,2) ) / (-2*virt_bar_right) ,2); double d2 = sqrt(d2_square); double phi; if (virt_bar_right <= virt_bar_ref) { double phi = pi-asin(d2/bar1); } else { double phi = asin(d2/bar1); } double theta_r = phi + acos((x_position - 0.5*base_spacing)/virt_bar_right); return theta_r; } float angleandposition::positiontoangle2(float x_position, float y_position)//left arm { double virt_bar_left = sqrt(pow(x_position + 0.5*base_spacing ,2) + pow(y_position,2) ); double d2_square = pow(bar1,2) - pow( ( pow(virt_bar_left,2) + pow(bar1,2) - pow(bar2,2) ) / (-2*virt_bar_left), 2); double d2 = sqrt(d2_square); double phi; if (virt_bar_left <= virt_bar_ref) { double phi = pi-asin(d2/bar1); } else { double phi = asin(d2/bar1); } double theta_l = pi - phi - acos((x_position + 0.5*base_spacing)/virt_bar_left); return theta_l; }