2010-08-30 47 views
10

我遇到了,我需要通過(X1,Y1)這樣的,以從(X0,Y0),以超對稱線或2D網格線特例:超對稱線算法?

void drawSymmetricalLine(int x0, int y0, int x1, int y1) 
{ 
    // loop and handle each (x, y)... 
} 

的實際問題在於點在那裏流行的線條繪製算法不會繪製兩個座標(另一個標記爲下面的x),因爲它看起來很粗糙,這在我的情況下是需要的。性能並不重要,但簡單。

這裏是我的意思是超對稱線:

ox ooo 
oo  ooo 


o o 
o o 
    o o 
     o 

回答

4

你或許可以使用Bresenham's line algorithm並修改它稍微所以當階躍變化,以抽籤位置從一行移動到另一個你倆之前油漆並且在當前x軸的y軸上的像素之後。

1

如果簡單性優於性能,那麼寫一個遞歸算法。在每一步計算DX = X1-X0和DY = Y1-Y0。

當DX = 0或DY = 0時停止遞歸(在這種情況下,您的行是垂直或水平的)。

否則,根據DX和DY的奇偶性計算兩個「中間」端點,並遞歸繪製兩條半線。

0

使用Bresenham's line algorithm除了在(x0 + dx,y0 + dy)處繪製點時,還繪製了(x1-dx,y1-dy)處的點。這樣你就可以確保它從雙方都是對稱的。

這有點低效,但你說這沒關係。

2

渲染該行兩次,一次從p0到p1,再次從p1到p0。

+0

這就是我爲遊戲中的對稱視線所做的。 – Madmenyo 2016-04-24 12:37:19