如何获取折线的每个像素的坐标?

时间:2013-03-02 13:32:15

标签: c# .net wpf

我有256x256 CanvasPolyline,第一个Point X坐标= 0,Point X Y在运行时,用户输入的点之间可能有更多的点。如何在呈现的X的0 - 255范围内获取每个Polyline的{​​{1}}坐标?

1 个答案:

答案 0 :(得分: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值四舍五入为整数,则很有可能会渲染相应的像素。