1

我有 256x256Canvas和 a Polyline,第一个Point坐标X= 0,最后Point一个坐标 = X255。在运行时用户输入的中间可能有更多点。如何获得渲染的 0-255 范围内Y的每个坐标?XPolyline

4

1 回答 1

1

假设折线的点是 (x[i], y[i]),对于 i = 0 到 n,其中 x 值按升序排列。所以,我们知道 x[0] = 0 和 x[n] = 255。然后假设给定了一个在 0 到 255 范围内的 x 值。我们首先找到一个索引 i,使得 x[i] < x <= x [i+1]。那么对应的y值由下式给出

y = y[i] + (y[i+1] - y[i])*(x - x[i])/(x[i+1] - x[i])

或者,等效地

y = ( (x[i+1] - x)*y[i] + (x - x[i])*y[i+1] ) / (x[i+1] - x[i])

当然,如果 x[i] = x[i+1] 会出现问题,所以这种特殊情况需要格外小心。

另外,请注意,这些公式将为您提供 y 的非整数值,这显然不直接对应于任何像素位置。究竟要渲染哪些像素取决于线的宽度和扫描转换算法的内部细节,我们无法知道。但是,如果将 y 值四舍五入为整数,则很有可能会渲染相应的像素。

于 2013-03-02T13:50:54.947 回答