mfc如何删除lineto画的_手把手教你用C++画木叶标志

33e14b79202a2dfb15816e9492681339.png

这篇文章介绍如何用代码绘制螺旋线。我会从最简单的一个圆开始,展示代码是如何逐渐演化的。

1ea23e4cc8b8c88249c32cb5069ca32a.png

刚想到这个问题的时候我也是懵逼的,螺旋线公式是什么?数学全忘光了呀。不管那么多就先画个圆吧,如果画不出螺旋线就教大家怎么画圆,啊哈哈:P。

好在还记得sin、cos,如图:

43e8c8147b2da67f518c0a8a85119097.png

那么可以得到

这就是我会的全部数学了,再多一点都不会,接下来考虑程序怎么写。

顺时针画一个圆,就是从0度开始绕着一个点画360度,通过上面的公式可知确定了角度和半径就能算出坐标(x, y),在每1度对应的坐标上画一个点,组合起来就是一个圆。

#define PIE 3.1415926

运行后可以看到顺时针画了一个圆:

f8e3a2e4735e37f08bc3d808396a62af.gif

圆画完了,然后我又花了10秒钟思考螺旋线的方案。如果在画圆的过程中,逐渐增加半径,那么画出来的是不是就变成螺旋线了呢?那必须是呀!我们来试试调整代码。

int 

运行结果:

c8370c6a0305f7019948edfac9204160.png

看到这个图我就知道妥了~ 逻辑没问题,再稍稍调整数据就行了。为了方便调整,我把代码放入了一个函数,然后开始调整参数。

从图中可以发现这么几个问题:

  1. 半径增长太快了,一圈还没画完就已经画出窗口外面。
  2. 我们只画了1圈360度,调整半径后应该多画几圈。

所以函数设置了两个参数,一个用于控制半径的增长,一个用于控制绘制的圈数,可以通过修改这两个参数的值得到不同的效果。

// step:r 的增长值

函数的名字是DrawLuoXuan,因为我也不知道“螺旋线”的英文怎么写只好写拼音了,没文化真可怕,同学们不要学我这样命名。有好的命名建议可以在下方给我留言。

结果只在屏幕中心画了一个小点就不动了:

df3df8d9756c49672d3cbee90b16352b.png

花了5秒钟查 Bug,发现 step 和 r 都是 int 类型,1 加上 0.1 结果还是 1,应该用浮点类型。修改代码后果然OK:

db1a3640d283f470d6c81ce14a0af7be.png


但是感觉点有一些不连续,那么就把画点改成画线段:

// thickness:线段宽度

422bf4416ed174ec0f5c9902de599384.png

用PS看看预览效果,完全不违和:

57dd3c6c0ebda120cb4cdd6c806cc37a.png

然后在代码中贴上背景,并把螺旋线的位置和颜色调整到合适的数据:

eca970c34f7849bf33934fe1036c3ae8.png

代码如下

IMAGE 

最后,转就完事了~

0bc76582ffe8ed5378624f2a8684b16c.gif

感兴趣的同学可以动手尝试一下,或在公众号(LaoXuPro)回复“螺旋线”获取源码下载地址。

看完点个赞再走吧,感谢您的支持和鼓励。

我的C++在线培训,点击下方链接了解详情:

同时毕业的程序员,为什么工作五年后收入相差几倍?​mp.weixin.qq.com
316362bcffe07e1cebae8df6f58a1e98.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值