超对称线算法?

问题描述:

我遇到了,我需要通过(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 

你或许可以使用Bresenham's line algorithm并修改它稍微所以当阶跃变化,以抽签位置从一行移动到另一个你俩之前油漆并且在当前x轴的y轴上的像素之后。

如果简单性优于性能,那么写一个递归算法。在每一步计算DX = X1-X0和DY = Y1-Y0。

当DX = 0或DY = 0时停止递归(在这种情况下,您的行是垂直或水平的)。

否则,根据DX和DY的奇偶性计算两个“中间”端点,并递归绘制两条半线。

使用Bresenham's line algorithm除了在(x0 + dx,y0 + dy)处绘制点时,还绘制了(x1-dx,y1-dy)处的点。这样你就可以确保它从双方都是对称的。

这有点低效,但你说这没关系。

渲染该行两次,一次从p0到p1,再次从p1到p0。

+0

这就是我为游戏中的对称视线所做的。 – Madmenyo 2016-04-24 12:37:19