我發現了這個廣義 Bresenham 的線條繪制演算法,我很難理解while它在這里做什么。
任何幫助是極大的贊賞。
編碼:
#define sign(x) ((x > 0)? 1 : ((x < 0)? -1: 0))
x = x1;
y = y1;
dx = abs(x2 - x1);
dy = abs(y2 - y1);
s1 = sign(x2 - x1);
s2 = sign(y2 - y1);
swap = 0;
if (dy > dx) {
temp = dx;
dx = dy;
dy = temp;
swap = 1;
}
D = 2*dy - dx;
for (i = 0; i < dx; i ) {
display_pixel (x, y);
while (D >= 0) {
D = D - 2*dx;
if (swap)
x = s1;
else
y = s2;
}
D = D 2*dy;
if (swap)
y = s2;
else
x = s1;
}
uj5u.com熱心網友回復:
Dx, y是從線到候選坐標的縮放距離。
更好:是從線到候選的距離的D比例 差x 1, y 0和x 1, y 1。
也就是說,作為x增量, 的符號D表示應該更接近y增量 0 還是 1?
(x, y交換的作用取決于應用演算法的八分圓。)
我預期while (D >= 0) {為if (D >= 0) {. Bresenham 線演算法
請注意,OP 的代碼會在abs(x2 - x1)和中溢位2*dy - dx。存在不依賴更廣泛數學的替代方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/488063.html
上一篇:用陣列中的字符交換數字
