方形渐开线:
方形渐开线是指:
由一点向外扩散的方形线(博主自己总结的,如果不会欢迎评论)
具体思路:
先确定一个点坐标,之后自行决定点的起始方向。
之后,我们假设这个点的运动规则是:
上 → 右 → 下 → 左
那么,一次轮回就是四次,一次轮回就是一圈。
我们即可找到规律:
当方向向上的时候,移动一格
当方向向右的时候,移动一格
当方向向下的时候,移动两格
当方向向左的时候,移动两格
根据这样的规律,我们便很容易进行编码
但,如果你不注意的话,很容易结果呈现以下的样子
然而我们看到的是一片蓝色。
为什么?
相信你通过上文的Excel表可以看到原因
如果让我们把Excel表继续画下去
相信如果我没有标记数字,那么眼前的是似海水般的忧郁蓝
不要忧郁,我们试着找找原因:
很快我们就知道,是不是我们的格子没有间隔。
很好,如果有间隔的话,我们的结果会是这样的:
很好,我们很容易就可以发现一个规律:
向上移动1格,向右移动2格,向下移动3格,向左移动4格
根据这样的规律,我们很容易可以编码。效果图就在文顶处
基于Qt框架写的代码如下:
void Widget::paintEvent(QPaintEvent *e)
{
paint=new QPainter;
paint->begin(this);
paint->setPen(QPen(Qt::blue,15)); //设置画笔形式
paint->setBrush(QBrush(Qt::red,Qt::SolidPattern)); //设置画刷形式
//x y 是起始坐标,direct是方向,t每次画线的时候增加的步长
int x = this->width() / 2, y = this->height() / 2 , direct = 0 , t = 5;
//循环500圈
for(int i=1;i<=500;i++)
{
//每四次循环为一圈
for(int j=0;j<3;j++)
{
//判断方向
switch (direct) {
case 0:
paint->drawLine(x,y,x,y+t);
y+=t;
break;
case 1:
paint->drawLine(x,y,x+t,y);
x+= t;
break;
case 2:
paint->drawLine(x,y,x,y-t);
y-=t;
break;
case 3:
paint->drawLine(x,y,x-t,y);
x-=t;
break;
}
t += 20; //每一次画线都增加一次步长
direct = direct >= 3 ? 0 : ++direct; //重置方向
}
}
paint->end();
}