计算机图形学中DDA算法只画出一个点的解决办法

在上机实践DDA算法中,我发现按照书上示例的程序来运行,图形窗口中只画出了一个点,在debug过程中学到了一个新的知识点,于是有了这篇blog,顺便分享一下像我们这种新手debug的心路历程。让我们先看一下最开始的程序吧!(编程环境为TC2.0,因为要用到graphics库,有条件的可以用OpenCL实现)

在这里插入图片描述
在这里插入图片描述
PS:前两行是在图形程序中初始化图形环境,原因是虚拟了DOS环境。(TC2.0这种上古神器好像不支持64位系统,所以要搭一下虚拟环境,这里也是借用了别人的东西)

然后眼睛好的同学可能发现了,在图形窗的左上角,还是有一个绿色的小点的:
在这里插入图片描述
那么问题出在哪?我的第一反应是循环出了问题,因为只显示了一个点,要不没进入循环,要不循环中画出来的是一个点。
然后查看一下各变量的值,哦吼,发现问题了,steps的值是0
steps不是取dx的绝对值吗,为什么会变成0?
查阅一下资料,或者翻看一下源码,会发现对不同类型的变量取绝对值有不同的函数,如下:

abs ( int )
fabsf ( float )
fabs ( double )
labs ( long )
llabs ( long long )
fabsl ( long double )

因此我想到两个解决办法,第一个当然是将abs函数全都改掉:
在这里插入图片描述
输出结果终于正确了
在这里插入图片描述
第二个办法,xe、ye、xs、ys都是int类型,那么将dx,dy定义成int自然也可以,然后注意在计算xIncrement和yIncrement时,要加上强制类型转换:
在这里插入图片描述
结果也是正确的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值