在上机实践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时,要加上强制类型转换:
结果也是正确的。