如何绘制方形渐开线图形

方形渐开线: 方形渐开线是指: 由一点向外扩散的方形线 (博主自己总结的,如果不会欢迎评论) 具体思路: 先确定一个点坐标,之后自行决定点的起始方向。 之后,我们假设这个点的运动规则是: 上 → 右 → 下 → 左 那么,一次轮回就是四次,

方形渐开线:




方形渐开线是指:

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


具体思路:


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




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

上 → 右 → 下 → 左

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



我们即可找到规律:

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

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

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

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


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


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

 

        


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


为什么?


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


知秋君
上一篇 2024-08-05 22:02
下一篇 2024-08-05 21:36

相关推荐