#include #include "geometrie-2d.h" /* Place dans la transformation une rotation d'angle autour de l'origine des axes. */ void geo2d_creer_rotation(double angle, double t[2][3]) { t[0][0] = t[1][1] = cos(angle); t[1][0] = sin(angle); t[0][1] = -t[1][0]; t[0][2] = t[1][2] = 0.0; } /* Place dans la transformation une mise à l'échelle de facteur par rapport à l'origine des axes. */ void geo2d_creer_echelle(double facteur, double t[2][3]) { t[0][0] = t[1][1] = facteur; t[0][1] = t[1][0] = t[0][2] = t[1][2] = 0.0; } /* Place dans la transformation une translation de vecteur (, ). */ void geo2d_creer_translation(double x, double y, double t[2][3]) { t[0][0] = t[1][1] = 1.0; t[0][1] = t[1][0] = 0.0; t[0][2] = x; t[1][2] = y; } /* Compose deux transformations et , effectuées dans cet ordre, et place le résultat dans la transformation . */ void geo2d_composer(const double t1[2][3], const double t2[2][3], double t[2][3]) { unsigned i, j; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) t[i][j] = t2[i][0] * t1[0][j] + t2[i][1] * t1[1][j]; t[0][2] += t2[0][2]; t[1][2] += t2[1][2]; } /* Applique la transformation aux coordonnées d'un point dans le plan. */ void geo2d_appliquer(const double t[2][3], double v[2]) { double tv[2][3], tr[2][3]; geo2d_creer_translation(v[0], v[1], tv); geo2d_composer(tv, t, tr); v[0] = tr[0][2]; v[1] = tr[1][2]; }