Moka libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
vector3d.hh
Go to the documentation of this file.
1 /*
2  * lib-spamod : Visualisation des objets en discret.
3  * Copyright (C) 2004, Moka Team, Université de Poitiers, Laboratoire SIC
4  * http://www.sic.sp2mi.univ-poitiers.fr/
5  * Copyright (C) 2009, Guillaume Damiand, CNRS, LIRIS,
6  * guillaume.damiand@liris.cnrs.fr, http://liris.cnrs.fr/
7  *
8  * This file is part of lib-spamod
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Lesser General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 /******************************************************************************
25  * Fichier : Vector3D.h *
26  * Auteur : DEXET Martine *
27  *----------------------------------------------------------------------------*
28  * Ce fichier contient la sp�cification de la classe Vector3D. Cette classe *
29  * permet de repr�senter un vecteur � l'aide de trois nombres � virgule *
30  * flottante correspondants aux trois composantes d'un vecteur. *
31  * *
32  *****************************************************************************/
33 
34 
35 #ifndef VECTOR3D_H
36 #define VECTOR3D_H
37 
38 #include "vertex.hh"
39 
40 
41 
42 /******************************************************************************
43  * Classe Vector3D *
44  *****************************************************************************/
45 
46 class Vector3D : public CVertex {
47 
48  public:
49 
50  // Constructeurs.
51  Vector3D();
52  Vector3D(float vx, float vy, float vz);
53  Vector3D(Vector3D const & v);
54  Vector3D(CVertex const & p1, CVertex const & p2);
55 
56  // M�thode calculant la longueur d'un vecteur.
57  float Get_Length();
58 
59  // M�thode permettant la normalisation d'un vecteur.
60  void Normalize();
61 
62  // M�thode calculant le produit scalaire de deux vecteurs.
63  float Scal_Product(Vector3D const & v);
64 
65  // M�thode calculant le produit vectoriel de deux vecteurs.
66  Vector3D Vect_Product(Vector3D const & v);
67 };
68 
69 /******************************************************************************
70  * Fichier : Vector3D.inl *
71  * Auteur : DEXET Martine *
72  *----------------------------------------------------------------------------*
73  * Ce fichier contient l'impl�mentation des m�thodes de la classe Vector3D *
74  * *
75  *****************************************************************************/
76 
77 
78 // Constructeurs.
79 inline
81  : CVertex(0.0, 0.0, 0.0)
82 {
83 }
84 
85 
86 inline
87 Vector3D::Vector3D(float vx, float vy, float vz)
88  :CVertex(vx, vy, vz)
89 {
90 }
91 
92 inline
94  :CVertex(v)
95 {
96 }
97 
98 inline
99 Vector3D::Vector3D(CVertex const & p1, CVertex const & p2)
100  :CVertex( p2.getX() - p1.getX(), p2.getY() - p1.getY(), p2.getZ() - p1.getZ())
101 {
102 }
103 
104 
105 // M�thode calculant la longueur d'un vecteur.
106 inline
108 {
109  return norm();
110 }
111 
112 
113 // M�thode permettant la normalisation d'un vecteur.
114 inline
116 {
117  float n = norm();
118  if (!isZero(n)) *this/n;
119 }
120 
121 
122 // M�thode calculant le produit scalaire de deux vecteurs.
123 inline
125 {
126  Vector3D v1 = *this;
127  Vector3D v2 = v;
128 
129  v1.Normalize();
130  v2.Normalize();
131 
132  return v1.dot(v2);
133 }
134 
135 
136 // M�thode calculant le produit vectoriel de deux vecteurs.
137 inline
139 {
140  return Vector3D(getY()*v.getZ() - v.getY()*getZ(),
141  getZ()*v.getX() - v.getZ()*getX(),
142  getX()*v.getY() - v.getX()*getY());
143 }
144 
145 #endif