-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTADGeometry.h
99 lines (63 loc) · 2.82 KB
/
TADGeometry.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
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
/*
* Universidade Federal do Vale do São Francisco - Univasf
* Colegiado de Engenharia de Computação
* Orientador: Prof. Dr. Jorge Cavalcanti
* Discentes: Elayne Lemos, [email protected]
* Jônatas de Castro, [email protected]
* Implementação:
* Este código parametriza figuras geométricas convexas regulares
* Apenas utilizando os parametros Centro, Raio, Numero de lados e fase, é possivel descrever totalmente a figura
* Os outros parâmetros definem os comportamentos gráficos como cor de preenchimento, cor de linha e espessura de linha
*
* As funções mascaram a utilização do OpenGL para desenhar as figuras e implementam todas as informações necessárias para
* determinar a colisão entre objetos
*/
#ifndef GEOMETRY_H
#define GEOMETRY_H
#include "TADUtil.c"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct tGeometry{
Color *fill; //Cor do preenchimento
Color *stroke; //Cor da linha
GLfloat stroke_width; //Tamanho da linha
Coord center; //Centro
GLfloat radius; //Raio de Inscrição
GLint sides; //Numero de lados
GLint phase; //Giro da forma partindo do eixo vertical
}Geometry;
Geometry GEOset();
Geometry * GEOnew();
Geometry GEOreset(Geometry geo);
void GEOdrop(Geometry *geo);
void GEOsetFill(Geometry *geo,Color color);
void GEOsetFillP(Geometry *geo, GLfloat r,GLfloat g,GLfloat b);
void GEOsetStroke(Geometry *geo,Color color);
void GEOsetStrokeP(Geometry *geo, GLfloat r,GLfloat g,GLfloat b);
void GEOsetCenter(Geometry *geo,Coord coord);
void GEOsetCenterP(Geometry *geo, GLfloat x,GLfloat y);
void GEOprint(Geometry geo);
void GEOprintSides(Geometry geo);
void GEOdraw(Geometry geo);
void GEOglVertex(Geometry geo);
GLfloat GEOcentralAngle(Geometry g);
GLfloat GEOapotema(Geometry g);
GLfloat GEOapotemaRel(Geometry g, GLfloat alfa);
GLfloat GEOxi(Geometry g, GLint i);
GLfloat GEOyi(Geometry g, GLint i);
Coord GEOvi(Geometry g, GLint i);
void GEOboundingRect(Coord rect[],Geometry g);
GLint GEOcutEdge(Geometry g, GLfloat angle);
GLint GEOalfaIn(Geometry g, GLfloat angle);
//Primeiro algoritmo de colisao
GLint GEOnotColisionCircle(Geometry a,Geometry b);
//Segundo algoritmo de colisao
GLint GEOnotColisionRect(Geometry a,Geometry b);
/**Pode não ser vantajoso utilizar este método, já que a maior parte das figuras serão eliminadas pelo primeiro algoritmo, que é muito mais simples que este
Todavia pode ser vantagem já que este não utiliza algoritmos com ponto flutuante, apenas comparações(mas ainda as faz com pontos flutuantes, retornando o mesmo problema)*/
GLint GEOcolisionVertexApotema(Geometry g, Coord c);
GLint GEOcolisionApotema(Geometry a,Geometry b);
GLint GEOcolision(Geometry a,Geometry b);
GLint GEOmultiColision(Geometry a,Geometry b[],GLint n);
#endif // GEOMETRY_H