/*************************************/ /* Auteur : Rémi Synave */ /* Date de création : 01/03/07 */ /* Date de modification : 15/03/15 */ /* Version : 0.4 */ /*************************************/ /*************************************/ /* Auteur : Romain Leguay */ /* Nguyen Haiduong */ /* Marianne Fichoux */ /* Date de modification : 26/05/09 */ /* Version : 0.2 */ /*************************************/ /***************************************************************************/ /* This file is part of a2ri. */ /* */ /* a2ri is free software: you can redistribute it and/or modify it */ /* under the terms of the GNU Lesser General Public License as published */ /* by the Free Software Foundation, either version 3 of the License, or */ /* (at your option) any later version. */ /* */ /* a2ri is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU Lesser General Public License for more details. */ /* */ /* You should have received a copy of the GNU Lesser General Public */ /* License along with a2ri. */ /* If not, see . */ /***************************************************************************/ #ifndef VERTEX__H #define VERTEX__H #include #include #include "util.h" #include "point.h" #include "vector.h" #include "matrix.h" typedef struct { double x; double y; double z; int *incidentvertices; int nbincidentvertices; } vf_vertex; //structure de données pour les sommets vf_vertex typedef struct { double x; double y; double z; int *sharededges; int nbsharededges; } vef_vertex; typedef vef_vertex skeleton_vertex; /** Affichage du vertex @param v le vertex à afficher @return aucun */ void vf_vertex_display ( const vf_vertex * const v); /** Affichage detaille du vertex @param v le vertex à afficher @return aucun */ void vf_vertex_display_detail ( const vf_vertex * const v); /** Translation d'un vertex @param v pointeur sur le vertex à translater @param dx décalage suivant l'axe X @param dy décalage suivant l'axe Y @param dz décalage suivant l'axe Z */ void vf_vertex_translate ( vf_vertex * v, const vector3d * const delta); /** Rotation d'un vertex en radian autour de l'axe X @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @return aucun */ void vf_vertex_rotateX_radian ( vf_vertex * v, double angle); /** Rotation d'un vertex en degre autour de l'axe X @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @return aucun */ void vf_vertex_rotateX_degre ( vf_vertex * v, double angle); /** Rotation d'un vertex en radian suivant l'axe X de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vf_vertex_rotateX_center_radian ( vf_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en degre suivant l'axe X de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vf_vertex_rotateX_center_degre ( vf_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en radian autour de l'axe Y @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @return aucun */ void vf_vertex_rotateY_radian ( vf_vertex * v, double angle); /** Rotation d'un vertex en degre autour de l'axe Y @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @return aucun */ void vf_vertex_rotateY_degre ( vf_vertex * v, double angle); /** Rotation d'un vertex en radian suivant l'axe Y de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vf_vertex_rotateY_center_radian ( vf_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en degre suivant l'axe Y de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vf_vertex_rotateY_center_degre ( vf_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en radian autour de l'axe Z @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @return aucun */ void vf_vertex_rotateZ_radian ( vf_vertex * v, double angle); /** Rotation d'un vertex en degre autour de l'axe Z @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @return aucun */ void vf_vertex_rotateZ_degre ( vf_vertex * v, double angle); /** Rotation d'un vertex en radian suivant l'axe Z de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vf_vertex_rotateZ_center_radian ( vf_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en degre suivant l'axe Z de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vf_vertex_rotateZ_center_degre ( vf_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en degre suivant l'axe donnée @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @param axe l'axe de rotation avec (nx2 + ny2 + nz2 = 1) @return aucun **/ void vf_vertex_rotate_axe_radian ( vf_vertex * v, gsl_matrix * M); /** Libération de la mémoire @param v le vf_vertex @return aucun **/ void vf_vertex_free ( vf_vertex * v); /** Affichage du vertex @param v le vertex à afficher @return aucun */ void vef_vertex_display ( vef_vertex * v); /** Affichage detaille du vertex @param v le vertex à afficher @return aucun */ void vef_vertex_display_detail ( const vef_vertex * const v); /** Translation d'un vertex @param v pointeur sur le vertex à translater @param dx décalage suivant l'axe X @param dy décalage suivant l'axe Y @param dz décalage suivant l'axe Z */ void vef_vertex_translate ( vef_vertex * v, const vector3d * const delta); /** Rotation d'un vertex en radian autour de l'axe X @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @return aucun */ void vef_vertex_rotateX_radian ( vef_vertex * v, double angle); /** Rotation d'un vertex en degre autour de l'axe X @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @return aucun */ void vef_vertex_rotateX_degre ( vef_vertex * v, double angle); /** Rotation d'un vertex en radian suivant l'axe X de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vef_vertex_rotateX_center_radian ( vef_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en degre suivant l'axe X de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vef_vertex_rotateX_center_degre ( vef_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en radian autour de l'axe Y @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @return aucun */ void vef_vertex_rotateY_radian ( vef_vertex * v, double angle); /** Rotation d'un vertex en degre autour de l'axe Y @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @return aucun */ void vef_vertex_rotateY_degre ( vef_vertex * v, double angle); /** Rotation d'un vertex en radian suivant l'axe Y de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vef_vertex_rotateY_center_radian ( vef_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en degre suivant l'axe Y de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vef_vertex_rotateY_center_degre ( vef_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en radian autour de l'axe Z @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @return aucun */ void vef_vertex_rotateZ_radian ( vef_vertex * v, double angle); /** Rotation d'un vertex en degre autour de l'axe Z @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @return aucun */ void vef_vertex_rotateZ_degre ( vef_vertex * v, double angle); /** Rotation d'un vertex en radian suivant l'axe Z de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en radian @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vef_vertex_rotateZ_center_radian ( vef_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en degre suivant l'axe Z de centre (cx,cy,cz) @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @param cx coordonnée x du centre de rotation @param cy coordonnée y du centre de rotation @param cz coordonnée z du centre de rotation @return aucun */ void vef_vertex_rotateZ_center_degre ( vef_vertex * v, double angle, const point3d * const centre); /** Rotation d'un vertex en degre suivant l'axe donnée @param v pointeur sur le vertex @param angle angle de rotation du vertex en degre @param axe l'axe de rotation avec (nx2 + ny2 + nz2 = 1) @return aucun **/ void vef_vertex_rotate_axe_radian ( vef_vertex * v, gsl_matrix * M); /** Libération de la mémoire @param v le vef_vertex @return aucun **/ void vef_vertex_free ( vef_vertex * v); #endif