-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCircleEngine.cpp
56 lines (50 loc) · 1.57 KB
/
CircleEngine.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
#include "CircleEngine.h"
CircleEngine::CircleEngine(QObject *parent)
: DrawEngine{parent}
{
this->pen = new QPen();
pen->setWidth(this->width);
pen->setColor(QColor(this->color.x(),this->color.y(),this->color.z()));
}
void CircleEngine::draw(QPainter *painter)
{
DrawEngine::draw(painter);
QVector<QPointF> points = samplePoints();
painter->drawPoints(points.data(),points.size());
}
QVector<QPointF> CircleEngine::samplePoints()
{
//先假设圆心为(0,0),计算完成后,给所有采样点坐标加一个偏置,移动到center
QVector<QPointF> points;
int x=0;
int y=this->radians;
int p=3-2*radians;
for(; x<=y;x++){
//坐标对称八次,得到8个采样点
QPointF p1(x,y); QPointF p2(-x,y); QPointF p3(x,-y); QPointF p4(-x,-y);
QPointF p5(y,x); QPointF p6(-y,x); QPointF p7(y,-x); QPointF p8(-y,-x);
points.push_back(p1); points.push_back(p2); points.push_back(p3); points.push_back(p4);
points.push_back(p5); points.push_back(p6); points.push_back(p7); points.push_back(p8);
//更新判别量Pi
if(p>=0){
p+=4*(x-y)+10;
y--;
}else{
p+=4*x+6;
}
}
//坐标偏置
for(auto it=points.begin(); it!=points.end();it++){
QPointF p=*it;
*it = QPointF(p.x()+center.x(),p.y()+center.y());
}
return points;
}
void CircleEngine::setRadians(int rand)
{
this->radians=rand;
}
void CircleEngine::setCenter(QVector2D pos)
{
this->center=pos;
}