超对称线算法?
问题描述:
我遇到了,我需要通过(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
答
如果简单性优于性能,那么写一个递归算法。在每一步计算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。
这就是我为游戏中的对称视线所做的。 – Madmenyo 2016-04-24 12:37:19