-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvetor.cpp
164 lines (150 loc) · 3.68 KB
/
vetor.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/**
* \file Vetor.cpp
*
* \brief Este arquivo e um pacote que contem as funcoes definidas no arquivo Vetor.hpp, que e responsavel pela definicoes de funcoes da estrutura
* dos vetores.
*
* \author
* Petrucio Ricardo Tavares de Medeiros \n
* Universidade Federal do Rio Grande do Norte \n
* Departamento de Computacao e Automacao Industrial \n
* petrucior at gmail (dot) com
*
* \version 0.0
* \date Outubro 2013
*/
#include "vetor.hpp" //rayTracing::Vetor
#include <math.h> //funcoes sqrt e acos
/**
* \defgroup RayTracingNameSpace Namespace rayTracing.
* @{
*/
/**
* \namespace rayTracing
*
* \brief O espaco de nomes rayTracing contem todas os arquivos que sao utilizados para sua implementacao.
*/
namespace rayTracing{
//------------------------------
// Metodos publicos
//------------------------------
/**
* \fn Vetor::Vetor();
*
* \brief Construtor da classe vetor.
*/
Vetor::Vetor(){
//Todas as coordenadas estao zeradas
x = 0;
y = 0;
z = 0;
pi = 3.141592;
}
/**
* \fn void Vetor::valores_vetor(double _x, double _y, double _z);
*
* \brief Atualiza os valores do vetor.
*
* \param _x - valor correspondente a coordenada x
* \param _y - valor correspondente a coordenada y
* \param _z - valor correspondente a coordenada z
*/
void
Vetor::valores_vetor(double _x, double _y, double _z){
x = _x;
y = _y;
z = _z;
}
/**
* \fn double Vetor::vx();
*
* \brief Encontra o valor da coordenada x.
*
* \return O valor da coordenada x do vetor.
*/
double
Vetor::vx(){
return x;
}
/**
* \fn double Vetor::vy();
*
* \brief Encontra o valor da coordenada y.
*
* \return O valor da coordenada y do vetor.
*/
double
Vetor::vy(){
return y;
}
/**
* \fn double Vetor::vz();
*
* \brief Encontra o valor da coordenada z.
*
* \return O valor da coordenada z do vetor.
*/
double
Vetor::vz(){
return z;
}
/**
* \fn void Vetor::vetor_diretor(Vetor& v, Vetor& r);
*
* \brief Calcula a diferenca entre vetores.
*/
void
Vetor::vetor_diretor(Vetor* v, Vetor* r){
x = v->x - r->x;
y = v->y - r->y;
z = v->z - r->z;
return;
}
/**
* \fn double Vetor::norma();
*
* \brief Calcula a norma ou modulo do vetor.
*
* \return A norma do vetor.
*/
double
Vetor::norma(){
double aux = (x*x) + (y*y) + (z*z);
double value = sqrt(aux);
return value;
}
/**
* \fn double Vetor::produto_escalar(const Vetor& v);
*
* \brief Calcula o produto escalar entre os dois vetores.
*
* \param v - vetor que esta realizando o produto escalar.
*
* \return O valor do produto escalar.
*/
double
Vetor::produto_escalar(Vetor* v){
double value = (x * v->x) + (y * v->y) + (z * v->z);
return value;
}
/**
* \fn double Vetor::angulo(const Vetor& v);
*
* \brief Calcula o angulo entre vetores [em radianos], mas dentro do metodo ha uma conversao para graus.
*
* \param v - vetor que se deseja encontrar o angulo.
*
* \return O angulo entre os dois vetores em GRAUS.
*/
double Vetor::angulo(Vetor* v){
double produtoEscalar = produto_escalar(v);
double normaA = norma();
double normaV = v->norma();
double ang_radianos = acos(produtoEscalar/(normaA * normaV));
/* 360 graus -----> 2*pi
ang -----------> ang_radianos */
double ang = (360.0 * ang_radianos)/(2 * pi);
return ang;
}
} //Fim do namespace rayTracing
/** @} */ //Fim do grupo class