使用matlab绘制弧线,[计算机图形学经典算法] 直线段和圆弧在屏幕上的绘制 (附matlab代码)...

刚学习了计算机图形学这门课程,为奠定根基的算法所倾倒,特此记录一二。

直线—中点 Bresenham 算法

DDA算法在效率上较低的原因是需要计算 k,并以之作为累加项。一个直观的改进方式,是在整个运算过程中将涉及到的数值乘以 dx (或dy),转化为整型进行运算。

中点 Bresenham 算法采用一种不同的观点来解决这一问题-判别式。我们先考虑一般的直线方程,在图形学中我们一般给出的已知条件是两个端点:

a110d32fa3809c33f8c83dfafd4d3d50.png

此判别方程的意义,在于直线上的所有点均使 F(x,y)=0。

现在,我们考虑离散的情形,在|k| < 1时,为判断如下图所示的与P相邻的像素点Pd和Pu中的哪一个归属于直线,我们取两者的中点M作为判决依据。将其坐标代入判别式

(1) F(M) < 0, 取上方点 Pu

(2) F(M) > 0, 取下方点 Pd

acab0ae2d56f091645008262e4fa507a.png

因此,若(Xi, Yi)为直线上的点,在判定下一个点(Xi+1,Yi+1)并在(Xi+1,Yi+1)和(Xi+1,Yi)中进行选择时,可以根据中点坐标(Xi+1,Yi+0.5)代入判别式进行判定。

F(Xi,Yi) = a Yi + b Xi + c = 0

F(Xi+1,Yi+0.5) = a Yi + 0.5a + b Xi + b +c

= 0.5a + b

(1) F(M) = 0.5a + b < 0, 取上方点 Pu (Xi+1,Yi+1)

(2) F(M) = 0.5a + b > 0, 取下方点 Pd (Xi+1,Yi)

两个问题:

(1) F(Xi,Yi)=0 不一定总能满足,如何解决?

(2) 尽管 a, b, c 均为整数(?),仍有一个0.5为小数。

问题(2)容易解决,仅需在计算过程中乘2即可;

问题(1)则较为麻烦。我们知道在起始点时,F(Xi,Yi)=0 总是成立的,在后续计算中我


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部