-
Notifications
You must be signed in to change notification settings - Fork 0
/
ctriangulo.h
73 lines (58 loc) · 1.76 KB
/
ctriangulo.h
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
#ifndef CTRIANGULO_H
#define CTRIANGULO_H
#include "cvertice3d.h"
#include "mate.h"
typedef struct{
int a, b, c;
} TT3D;
class CTriangulo : public TT3D
{
public:
CTriangulo () {}
~CTriangulo () {}
//int a, b, c;
CVertice3d normal;
CVertice3d centro;
void CalcularNormal(CVertice3d *vertices)
{
CVertice3d ba, bc;
ba.Vector(&(vertices[b]), &(vertices[a]));
bc.Vector(&(vertices[b]), &(vertices[c]));
normal.x = (ba.y * bc.z) - (ba.z * bc.y);
normal.y = (ba.z * bc.x) - (ba.x * bc.z);
normal.z = (ba.x * bc.y) - (ba.y * bc.x);
}
void CalcularCentro(CVertice3d *vertices)
{
centro.x = (vertices[a].x + vertices[b].x + vertices[c].x) / 3.0;
centro.y = (vertices[a].y + vertices[b].y + vertices[c].y) / 3.0;
centro.z = (vertices[a].z + vertices[b].z + vertices[c].z) / 3.0;
}
double ProductoEscalarNormalCentro()
{
return normal.ProductoEscalar(¢ro);
}
int Oculto(CVertice3d *vertices)
{
// CalcularNormal(vertices);
// LAS CAMARAS ESTARAN SIEMPRE CENTRADAS EN 0,0,0 CON VISTA HACIA 0,0,1
// POR ESTO AL HACER EL PRODUCTO ESCALAR VENDRA DADO UNICAMENTE POR LA
// COMPONENTE Z DE LA NORMAL DEL TRIANGULO
// if (normal.z > 0.0)
// return 0;
// return 1;
if (((vertices[a].x - vertices[b].x) * (vertices[c].y - vertices[b].y)) > ((vertices[a].y - vertices[b].y) * (vertices[c].x - vertices[b].x)))
return 0;
return 1;
}
int Oculto(TV2D *vertices)
{
// LAS CAMARAS ESTARAN SIEMPRE CENTRADAS EN 0,0,0 CON VISTA HACIA 0,0,1
// POR ESTO AL HACER EL PRODUCTO ESCALAR VENDRA DADO UNICAMENTE POR LA
// COMPONENTE Z DE LA NORMAL DEL TRIANGULO
if (((vertices[a].x - vertices[b].x) * (vertices[c].y - vertices[b].y)) > ((vertices[a].y - vertices[b].y) * (vertices[c].x - vertices[b].x)))
return 0;
return 1;
}
};
#endif