为什么写这篇文章?
博主开始也是到处参考研究了很多代码,发现要考虑任意斜率的话,很多代码都是用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向下取整
}
}
- Bresenham画线算法:以dx来决定每次增加还是减少,这样就把k<0的情况考虑进去,当 |k|>1时,就交换两

本文介绍了计算机图形学中三种画线算法:DDA、Bresenham和中点画线法。博主针对任意斜率的画线问题,通过优化代码实现简洁的解决方案。文章使用JavaScript实现,但原理通用,适用于不同编程语言。Bresenham算法考虑了dx来决定增加方向,中点画线法则在Bresenham基础上进行改进。
最低0.47元/天 解锁文章
4350

被折叠的 条评论
为什么被折叠?



