计算机图形学MFC学习笔记:Bresenham直线算法

本文记录了学习过程中如何使用Bresenham算法在MFC中绘制金刚石图案,包括理解算法原理、整数转换和效率提升,以及解决编程过程中的问题和调试技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

计算机图形学MFC学习笔记:Bresenham直线算法

**在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本次课的扩展题目:绘制金刚石图案
在这里插入图片描述
圆周等分20分然后各个点之间连线
在这里插入图片描述
有空以后看能不能搞出来吧,目前阶段是以补充老师课堂讲解、巩固知识为主,同时Unity那边也要跟进,暂时没有这么多时间给我这个又酸又菜又多余的懒人酸菜鱼来钻研·······

数学极差的我有点看不明白算法讲解,又找了个MOOC视频补充学习:
https://www.icourse163.org/learn/CAU-45006?tid=1463638445#/learn/announce
在这里插入图片描述

首先是关于为什么d要减一的问题
在这里插入图片描述
还有我觉得这个不太好理解的、代码里采用的Bresenham整数算法
在这里插入图片描述
在这里插入图片描述

上面这个MOOC讲解的很详细~
https://www.icourse163.org/learn/CAU-45006?tid=1463638445#/learn/content?type=detail&id=1241809230&cid=1264437056

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样,就把原来是小数的0.5和dx、dy都转换成了整数
在这里插入图片描述
在这里插入图片描述
应用广泛的原因:
效率提高到整数加法,并且不受直线方程类型的限制。

捉虫++
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好吧,下一页告诉我,他是个宏定义的玩意········(有话能早点说么·······)
在这里插入图片描述

MFC的命名区分大小写!区分大小写!区分大小写!I、L、J这样的看清楚!!!!
刚刚这个地方一直报错,检查半天不得法门,最后一看,我把类名当中的L写成了小写········
在这里插入图片描述
改正之后:
在这里插入图片描述
我的内心:
在这里插入图片描述
我根据他书本前面的讲解,自己加上了ROUND的宏定义
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
中间有个需要自行添加数组?的操作,百度一波走起,因为写[i]会报错,我就先在类向导里面写成单个变量,然后再手动把定义改成数组:
https://blog.csdn.net/qq_17242957/article/details/46788619
在这里插入图片描述
代码总算是敲完了,然后,又出现 这个神奇的问题
按我的经验,一般是定义了的函数没有写内容导致的
在这里插入图片描述
在这里插入图片描述
我感觉这里析构函数写成虚函数不正确,他一直报错”无法解析的外部命令“,最后看也不影响什么,就写成了没有任何功能的析构函数处理。
在这里插入图片描述在这里插入图片描述
现在让我们看看效果:
在这里插入图片描述
emmm为什么只有最后一条线渐变成功了········
在这里插入图片描述
在这里插入图片描述
检查一下负责画线的,CLine里面的LineTo函数,最后一条线渐变成功说明不是算法的问题,十有八九是我哪个地方参数写错了之类的。
在这里插入图片描述
宏定义他又不认识,就离谱。我直接把宏定义内容给他粘过去。
在这里插入图片描述
可是并没有什么变化
在这里插入图片描述
好像这个函数也没问题啊······那也许是我初始值搞错了····?
一顿操作猛如虎检查下来,我也不知道为什么了,就按自己的理解给他改写了一下代码:
只要i大于等于1,说明至少画了两个点可以连直线了,就MoveTo移到前面画的点作为起点,LineTo当前画的第i个点连一条渐变直线。
在这里插入图片描述
苍天不负有心人,这回可算是正常显示了
在这里插入图片描述
在这里插入图片描述
现在是凌晨3.17分,终于可以愉快收工了。
最后以MOOC视频里面老师的总结作为收尾吧,这个小结我觉得说得很有道理,大家共同勉励,一起学习,努力成为更好的自己~~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值