/*************************************/ /* Auteur : Rémi Synave */ /* Date de création : 01/03/07 */ /* Date de modification : 15/03/15 */ /* Version : 0.4 */ /*************************************/ /***************************************************************************/ /* 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 VECTOR__H #define VECTOR__H #include #include #include #include "util.h" typedef struct { double dx, dy, dz; } vector3d; /** Initialisation d'un vector3d (dx,dy,dz) @param v pointeur sur le vector3d @param dx dx @param dy dy @param dz dz @return aucun */ void vector3d_init ( vector3d * v, double dx, double dy, double dz); /** Affichage d'un vector3d @param v le vector3d à afficher @return aucun */ void vector3d_display ( const vector3d * const v); /** Calcule la longueur d'un vector3d @param v le vector3d à mesurer @return taille du vector3d */ double vector3d_size ( const vector3d * const v); /** Teste si deux vector3d sont égaux @param v1 le premier vector3d @param v2 le second vector3d à tester @return 1 si les deux vector3d sont égaux, 0 sinon */ int vector3d_equal ( const vector3d * const v1, const vector3d * const v2); /** Normalise le vector3d : transforme le vector3d de sorte que sa longueur soit égale à 1.0 @param v poiteur sur le vector3d @return aucun */ void vector3d_normalize ( vector3d * v); /** Produit scalaire de deux vector3d @param v1 le premier vector3d @param v2 le second vector3d @return produit scalaire v1.v2 */ double vector3d_scalarproduct ( const vector3d * const v1, const vector3d * const v2); /** Produit vectoriel de deux vector3d @param v1 le premier vector3d @param v2 le second vector3d @return un vector3d résultat de v1^v2 */ vector3d vector3d_vectorialproduct ( const vector3d * const v1, const vector3d * const v2); /** Inverse le vecteur @param v pointeur sur le vecteur à inverser @return aucun **/ void vector3d_reverse ( vector3d * v); /** Addition de deux vecteurs3d v1+v2 @param v1 premier vecteur @param v2 second vecteur @param un vector3d résultat de v1+v2 **/ vector3d vector3d_add ( const vector3d * const v1, const vector3d * const v2); /** Soustraction de deux vecteurs3d v1-v2 @param v1 premier vecteur @param v2 second vecteur @param un vector3d résultat de v1-v2 **/ vector3d vector3d_sub ( const vector3d * const v1, const vector3d * const v2); /** Retourne la position de la valeur tosearch, -1 sinon @param list tableau de vector3d @param size taille du tableau @param tosearch vector3d à chercher @return position de la première occurence, -1 s'il n'apparait pas dans le tableau */ int list_vector3d_contains ( const vector3d * const list, int size, const vector3d * const tosearch); /** Ajoute le vector3d toadd en fin de liste @param list pointeur sur le premier élément du tableau @param size pointeur sur la taille du tableau @param toadd vector3d à ajouter @param add_type WITH_REDUNDANCE ou WITHOUT_REDUNDANCE
avec redondance : ajout simple
sans redondance : ajout si la valeur n'apparait pas dans la liste @return 1 si succès, 0 sinon */ int list_vector3d_add ( vector3d ** list, int *size, const vector3d * const toadd, int add_type); /** Affichage de la liste de vector3d @param list tableau de vector3d @param size taille du tableau @return aucun */ void list_vector3d_display ( const vector3d * const list, int size); #endif