为什么写这篇文章?
博主开始也是到处参考研究了很多代码,发现要考虑任意斜率的话,很多代码都是用if语句来分别讨论的,其实其中有很多重复的代码部分,我觉得不代码不简洁,就到处查询参考思考才总结出一些比较简洁的代码,希望大家喜欢,也期待大家有更好的方法分享。
其中的代码我是用JavaScript写的,但其中原理是相通的,基本改改语法就都能用。
进入正文:
- 数值微分法DDA: 其中看x的斜率来确定增加的方向,DrawPixel(x,y,color)为画点个人函数。
function DDA(x0, y0, x1, y1, color) {
var dx, dy, m, k;
var incX, incY, x, y;
dx = x1 - x0; dy = y1 - y0;
//正则表达式:其中?前条件为true则m=Math.abs(dx) ,反之m=Math.abs(dy)
m = (Math.abs(dx) > Math.abs(dy)) ? Math.abs(dx) : Math.abs(dy);//Math.abs取绝对值
incX = dx / m;
incY = dy / m;
x = x0; y = y0;
for (k = 1; k < m; k++) {
x += incX;
y += incY;
DrawPixel(Math.floor(x + 0.5), Math.floor(y + 0.5), color);//Math.floor向下取整