16 tfloat alpha12 = alpha2 - alpha1 ;
17 if( alpha1 > alpha2 ) alpha12 += TWOPI ;
19 tfloat alpha31 = alpha1 - alpha3 ;
20 if( alpha3 > alpha1 ) alpha31 += TWOPI ;
22 tfloat L12 = sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) ) ;
23 tfloat L31 = sqrt( (x3-x1)*(x3-x1) + (y3-y1)*(y3-y1) ) ;
25 tfloat phi = atan2( (y1-y2) , (x1-x2) ) ;
26 tfloat sigma = atan2( (x1-x3) , (y1-y3) ) + HALFPI + phi ;
28 tfloat gamma = sigma - alpha31 ;
30 tfloat sin_alpha12 = Sin( alpha12 ) ;
31 tfloat sin_alpha31 = Sin( alpha31 ) ;
33 tfloat tau = atan( (sin_alpha12*(L12*sin_alpha31 - L31*Sin(gamma))) / (L31*sin_alpha12*Cos(gamma) - L12*Cos(alpha12)*sin_alpha31) ) ;
35 if( (alpha12 <
PI) && (tau < 0.0) ) tau +=
PI ;
36 if( (alpha12 >
PI) && (tau > 0.0) ) tau -=
PI ;
39 if( ( (sigma > 0.0) && (alpha31 >
PI) ) || ( (sigma < 0.0) && (alpha31 <
PI) ) ) tau =
PI ;
42 if( fabs( sin_alpha12 ) > fabs( sin_alpha31 ) )
43 L1 = ( L12 * Sin( tau + alpha12 ) ) / sin_alpha12 ;
45 L1 = ( L31 * Sin( tau + sigma - alpha31 ) ) / sin_alpha31 ;
47 *x = x1 - L1 * Cos( phi + tau ) ;
48 *y = y1 - L1 * Sin( phi + tau ) ;
#define PI
The value of PI.
double tfloat
Defines the type for float/double.