所有点都在线上

时间:2012-10-31 17:15:24

标签: math geometry

如果我从let(2)到(42,28)画一条线,我如何获得Point列表中的所有点?我尝试使用斜坡,但我似乎无法掌握它。 要清楚:我想要线条覆盖的所有像素。所以我可以让这条线“可点击”。

2 个答案:

答案 0 :(得分:3)

这是一个数学问题。一条线的等式是:

y = mx + c

所以你需要找出渐变(m)和截距(c),然后插入x的值来得到y的值。

但你是什么意思“一线上的所有点”?如果x和y是实数,则存在无限多个点。

答案 1 :(得分:1)

您可以使用公式(x-x1)/(x1-x2)=(y-y1)/(y1-y2)。而且你知道x值在2到42之间的点在线上,并且必须找到它们相关的y值。如果任何得到的y值不是整数,那么它应该是正确的近似值。如果两个连续的y值相差超过1,则应将缺失的y值映射到最后的x值。

这是伪代码(试图捕捉算法的关键)

prevY = y1

for(i=x1+1;i<=x2;++i)
{

  y = computeY(i);

  if(diff(y,prevY)>1) dump_points(prevY,y,i);

  prevY = y;

  dump_point(i,y);

}

dump_points(prevY,y2,x2);

我可能不会在这里覆盖所有情况(尤其是不是角落的情况)。但是这个想法是,对于x的一个值,可能有许多y值,反之亦然,这取决于线的斜率。算法应考虑这一点并生成所有点。