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