-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEnvelope.cpp
96 lines (84 loc) · 2.08 KB
/
Envelope.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
//
// Envelope.cpp
// OpenGLTest
//
// Created by Márcio Sarroglia Pinho on 28/08/22.
// Copyright © 2022 Márcio Sarroglia Pinho. All rights reserved.
//
#include "Envelope.h"
Envelope::Envelope()
{
}
Envelope::Envelope(Ponto P1, Ponto P2)
{
GeraEnvelope(P1,P2);
}
bool Envelope::temColisao(Envelope E)
{
/*
cout << "Campo de Visao: ";
imprime();
cout << endl;
cout << "Env 2: ";
E.imprime();
cout << endl;
*/
float distancia;
distancia = fabs(Meio.x - E.Meio.x);
// cout << "distancia X: " << distancia << endl;
if (distancia > (MeiaLargura.x + E.MeiaLargura.x))
return false;
distancia = fabs(Meio.y - E.Meio.y);
//cout << "distancia Y: " << distancia << endl;
if (distancia > (MeiaLargura.y + E.MeiaLargura.y))
return false;
return true;
}
bool Envelope::envelopeCruzaLinhaHorizontal(Ponto p, Envelope e)
{
if((Min.y <= p.y) && (Max.y >= p.y) && (Max.x <= p.x)) return true;
if((p.y <= e.Max.y) && (p.y >= e.Min.y) && (p.x <= e.Max.x) && (p.x >= e.Min.x)) return true;
//if(HaInterseccao())
return false;
}
void Envelope::GeraEnvelope(Ponto P1, Ponto P2)
{
Min = ObtemMinimo(P1, P2);
Max = ObtemMaximo(P1, P2);
Meio = (Max+Min) * 0.5;
MeiaLargura = (Max-Min) * 0.5;
// Min.imprime("Minimo: ", "\n");
// Max.imprime("Maximo: ", "\n");
// Meio.imprime("Meio: ", "\n");
// MeiaLargura.imprime("Meia Largura: ", "\n");
}
void Envelope::AtualizaEnvelope()
{
Meio = (Max+Min) * 0.5;
MeiaLargura = (Max-Min) * 0.5;
}
bool Envelope::pontoEstaDentro(Ponto P)
{
if (P.x < Min.x) return false;
if (P.x > Max.x) return false;
if (P.y < Min.y) return false;
if (P.y > Max.y) return false;
return true;
}
void Envelope::imprime()
{
Min.imprime("Minimo: ");
Max.imprime(" Maximo: ");
}
void Envelope::Desenha()
{
glBegin(GL_LINE_LOOP);
glVertex2d(Min.x, Min.y);
glVertex2d(Min.x, Max.y);
glVertex2d(Max.x, Max.y);
glVertex2d(Max.x, Min.y);
glEnd();
}
Ponto Envelope::getMeio(){
return Meio;
}