1

如果我从(2,3)到(42,28)画一条线,我怎样才能在点列表中获得线上的所有点?我尝试使用斜坡,但我似乎无法掌握它的窍门。需要明确的是:我想要线条覆盖的所有像素。所以我可以让这条线“可点击”。

4

2 回答 2

3

这是一道数学题。直线方程为:

y = mx + c

因此,您需要计算出梯度 (m) 和截距 (c),然后插入 x 的值以获得 y 的值。

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

于 2012-10-31T17:17:29.080 回答
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 值,反之亦然,具体取决于线的斜率。算法应该考虑这一点并生成所有点。

于 2012-10-31T18:07:30.597 回答