/
Curve.cpp
106 lines (95 loc) · 2.67 KB
/
Curve.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
#include "Curve.h"
Curve::Curve()
{
vertex.clear();
//For test
xCenter = 0;
yCenter = 0;
}
void Curve::setNextPoint(Point p)
{
this->vertex.push_back(p);
}
void Curve::changePoint(int index, Point p)
{
if(index<0 || index >= vertex.size()){
qDebug()<<"Change Points in polygon error"<<endl;
}else{
this->vertex[index] = p;
}
}
void Curve::getRectangle()
{
int maxX = vertex.first().getX();
int minX = vertex.first().getX();
int maxY = vertex.first().getY();
int minY = vertex.first().getY();
for(Point v: vertex){
int vx = v.getX();
int vy = v.getY();
if(vx>maxX){
maxX = vx;
}
if(vx<minX){
minX = vx;
}
if(vy>maxY){
maxY = vy;
}
if(vy<minY){
minY = vy;
}
}
LeftUp.setPoint(minX,minY); //左上角(minX,minY)
LeftDown.setPoint(minX,maxY); //左下角(minX,maxY)
RightUp.setPoint(maxX,minY); //右上角(maxX,minY)
RightDown.setPoint(maxX,maxY);//右下角(maxX,maxY)
double cX = (minX+maxX)/2;
double cY = (minY+maxY)/2;
this->xCenter = cX;
this->yCenter = cY;
double offSetX = cX + ROTATE_RIDUS*qSin(rotateAngle);
double offSetY = cY - ROTATE_RIDUS*qCos(rotateAngle);
centerPoint.setPoint(cX,cY); //中点
rotatePoint.setPoint(offSetX,offSetY); //旋转点
}
void Curve::getRectangleRotating()
{
if(xCenter == 0){
xCenter = this->centerPoint.getX();
yCenter = this->centerPoint.getY();
}
qDebug()<<"稳定!getRectangleRotating"<<endl;
int maxX = vertex.first().getX();
int minX = vertex.first().getX();
int maxY = vertex.first().getY();
int minY = vertex.first().getY();
for(Point v: vertex){
int vx = v.getX();
int vy = v.getY();
if(vx>maxX){
maxX = vx;
}
if(vx<minX){
minX = vx;
}
if(vy>maxY){
maxY = vy;
}
if(vy<minY){
minY = vy;
}
}
LeftUp.setPoint(minX,minY); //左上角(minX,minY)
LeftDown.setPoint(minX,maxY); //左下角(minX,maxY)
RightUp.setPoint(maxX,minY); //右上角(maxX,minY)
RightDown.setPoint(maxX,maxY);//右下角(maxX,maxY)
// double cX = this->centerPoint.getX();
// double cY = this->centerPoint.getY();
double cX = xCenter;
double cY = yCenter;
qDebug()<<"中点坐标为: "<<"("<<(int)cX<<","<<(int)cY<<")"<<endl;
double offSetX = cX + ROTATE_RIDUS*qSin(rotateAngle);
double offSetY = cY - ROTATE_RIDUS*qCos(rotateAngle);
rotatePoint.setPoint(offSetX,offSetY); //旋转点
}