我希望在任何线段方向/长度的最小平均时间内将线段渲染到虚拟整数空间。该段由具有实数值(双精度)的两个点定义。
我已经提出了一些可能有用的想法,但是它们让我觉得可怕的,启发式的黑客攻击。 (即,根据细分的方向,有一个明确的“更好的方向”)。
当然有一种比蛮力方法更好的方法(在端点之间找到“长”方向(x轴或y轴),然后沿着该轴沿着每个整数值步进,并在正交轴上舍入值确定沿“长”轴的每个整数值的一个像素(整数点)位置。)
答案 0 :(得分:2)
你对“更好的方向”的看法让我想起了Bresenham线算法,这可能是你想要的吗? http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html
[编辑]
与非整数端点的区别对我来说并不明显,但有一个例子here。
当您在长轴上每个整数范围绘制一个像素时,我假设您的绘图点具有相同的强度(无抗锯齿)。
所以你可以在没有整数优化(你已经做过的)和最后的圆点的情况下实现bresenham。 或者通过整数bresenham使用定点数学运算(即将坐标乘以65536并进行舍入,在长轴上以较长的步长运行bresenham,并在绘制之前将输出点分解或移回所需的值)。
但是,无论您是绘制字体,还是细分曲线或线框矩形,使用直接bresenhams或使用抗锯齿算法都可能看起来更好。
答案 1 :(得分:1)
您应该找到与X和Y值相关的直线方程。然后在每个整数x坐标处评估它。这将为您提供y坐标作为浮点数,然后您可以将其舍入并绘制。