0

我想在任何线段方向/长度的最短平均时间内将线段渲染到虚拟整数空间。该段由具有实数值(双精度值)的两个点定义。

我已经提出了几个可能可行的想法,但它们给我的印象是可怕的、启发式的黑客攻击。(即有一个明确的“更好的方向”开始,取决于段的方向)。

当然有比蛮力方法更好的方法(找到端点之间的“长”方向(x 或 y 轴),然后沿着该轴沿着每个整数值步进,并在正交轴上舍入该值以准确确定沿“长”轴的每个整数值的一个像素(整数点)位置。)

4

2 回答 2

2

你所说的“更好的方向”让我想起了 Bresenham 线算法,这可能是你想要的吗? http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html

[编辑]

与非整数端点的区别对我来说并不明显,但这里有一个说明

当您在长轴上每个整数跨度绘制一个像素时,我假设您的绘图点具有相同的强度(无抗锯齿)。

所以你可以在没有整数优化(你已经做过的)和最后的圆点的情况下实现 bresenham。或通过整数 bresenham 使用定点数学(即,将坐标乘以 65536 并舍入,在长轴上以更长的步长运行 bresenham,然后在绘制之前将输出点除或移回所需的值)。

但取决于您是绘制字体、镶嵌曲线还是线框矩形,使用直 bresenhams 或使用抗锯齿算法可能看起来更好。

于 2013-01-14T23:31:10.910 回答
1

您应该找到与 X 和 Y 值相关的直线方程。然后在每个整数 x 坐标处对其进行评估。这将为您提供 y 坐标作为浮点数,然后您可以对其进行四舍五入并绘制。

于 2013-01-14T23:15:50.257 回答