Si la rapidité des calculs est critique, pense à optimiser. Par exemple quelque chose comme :
void calculpoint( double xa, double ya, double xb, double yb, double bc, double angle, double *pxc, double *pyc)
/* Entrée :
- coords de A : xa, ya
- coords de B : xb, yb
- distance BC : bc
- angle (BA, BC) : angle
*/
/* Sortie :
- pxc, pyc : pointeurs sur les coordonnées de C
- utilise
*/
{
double ba ; /* distance BA */
double xab ; /* xa - xb */
double yab ; /* ya - yb */
double bcsurba ; /* bc / ba */
double xbc, ybc ; /* coordonnées du vecteur BC' */
double xc, yc ; /* coordonnées du point C */
double cosangle, sinangle ; /* cosinus et sinus de l'angle */
xab = xa - xb ;
yab = ya - yb ;
cosangle = cos(angle) ;
sinangle = sin( angle) ;
ba = sqrt( xab * xab + yab * yab ) ;
bcsurba = bc / ba ;
xbc = bcsurba * xab ;
ybc = bcsurba * yab ;
xc = xb + cosangle * xbc - sinangle * ybc ;
yc = yb + sinangle * xbc + cosangle * ybc ;
*pxc = xc ;
*pyc = yc ;
}
