我有256x256 Canvas
和Polyline
,第一个Point
X
坐标= 0,Point
X
Y
在运行时,用户输入的点之间可能有更多的点。如何在呈现的X
的0 - 255范围内获取每个Polyline
的{{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值四舍五入为整数,则很有可能会渲染相应的像素。