您的位置:首页 > 其它

如何绘制方形渐开线

2015-09-20 17:14 183 查看
方形渐开线:



方形渐开线是指:

由一点向外扩散的方形线(博主自己总结的,如果不会欢迎评论)

具体思路:

先确定一个点坐标,之后自行决定点的起始方向。



之后,我们假设这个点的运动规则是:

上 → 右 → 下 → 左

那么,一次轮回就是四次,一次轮回就是一圈。



我们即可找到规律:

当方向向上的时候,移动一格

当方向向右的时候,移动一格

当方向向下的时候,移动两格

当方向向左的时候,移动两格

根据这样的规律,我们便很容易进行编码

但,如果你不注意的话,很容易结果呈现以下的样子



然而我们看到的是一片蓝色。

为什么?

相信你通过上文的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();

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: