这篇文章介绍如何用代码绘制螺旋线。我会从最简单的一个圆开始,展示代码是如何逐渐演化的。
刚想到这个问题的时候我也是懵逼的,螺旋线公式是什么?数学全忘光了呀。不管那么多就先画个圆吧,如果画不出螺旋线就教大家怎么画圆,啊哈哈:P。
好在还记得sin、cos,如图:
那么可以得到
这就是我会的全部数学了,再多一点都不会,接下来考虑程序怎么写。
顺时针画一个圆,就是从0度开始绕着一个点画360度,通过上面的公式可知确定了角度和半径就能算出坐标(x, y),在每1度对应的坐标上画一个点,组合起来就是一个圆。
#define PIE 3.1415926
运行后可以看到顺时针画了一个圆:
圆画完了,然后我又花了10秒钟思考螺旋线的方案。如果在画圆的过程中,逐渐增加半径,那么画出来的是不是就变成螺旋线了呢?那必须是呀!我们来试试调整代码。
int
运行结果:
看到这个图我就知道妥了~ 逻辑没问题,再稍稍调整数据就行了。为了方便调整,我把代码放入了一个函数,然后开始调整参数。
从图中可以发现这么几个问题:
- 半径增长太快了,一圈还没画完就已经画出窗口外面。
- 我们只画了1圈360度,调整半径后应该多画几圈。
所以函数设置了两个参数,一个用于控制半径的增长,一个用于控制绘制的圈数,可以通过修改这两个参数的值得到不同的效果。
// step:r 的增长值
函数的名字是DrawLuoXuan,因为我也不知道“螺旋线”的英文怎么写只好写拼音了,没文化真可怕,同学们不要学我这样命名。有好的命名建议可以在下方给我留言。
结果只在屏幕中心画了一个小点就不动了:
花了5秒钟查 Bug,发现 step 和 r 都是 int 类型,1 加上 0.1 结果还是 1,应该用浮点类型。修改代码后果然OK:
但是感觉点有一些不连续,那么就把画点改成画线段:
// thickness:线段宽度
用PS看看预览效果,完全不违和:
然后在代码中贴上背景,并把螺旋线的位置和颜色调整到合适的数据:
代码如下
IMAGE
最后,转就完事了~
感兴趣的同学可以动手尝试一下,或在公众号(LaoXuPro)回复“螺旋线”获取源码下载地址。
看完点个赞再走吧,感谢您的支持和鼓励。
我的C++在线培训,点击下方链接了解详情:
同时毕业的程序员,为什么工作五年后收入相差几倍?mp.weixin.qq.com