如何在给定距离的线上查找点?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我有一个问题,我知道一条线,我只知道它的斜率(m)和它的一个点A(x,y)我如何计算这条线上的点(实际上是两条),距离点(d)一个 ???我要求这找到一个线上的像素的强度,通过A(x,y)的距离。在这种情况下,距离将是像素数。

提问于
用户回答回答于

我建议将该行转换为参数化格式,而不是点斜率。也就是说,线的参数函数返回沿着该线的点,以获得某个参数t的值。您可以将该线表示为参考点,并将一个向量表示该线经过该点的方向。这样,您只需从A点前进和后退两个单位即可获得其他积分。

由于你的线有斜率m,它的方向矢量<1,m>。因为它在x中每移动1个像素就会在y中移动m个像素。你想把这个方向矢量归一化为单位长度,所以你除以矢量的大小。

    幅度=(1 ^ 2 + m ^ 2)^(1/2)

    N = <1,m> /幅度= <1 /幅度,m /幅度>

标准化的方向矢量是N.现在你差不多完成了。您只需要以参数化格式为您的线路编写公式:

    f(t)= A + t * N

这使用矢量数学。具体而言,标量向量乘法(您的参数t和向量N)和向量相加(A和t * N)。函数f的结果是沿着线的点。你正在寻找的2点是f(d)和f(-d)。用你选择的语言来实现它。

与迄今为止所有其他答案相比,使用此方法的好处是可以轻松扩展此方法以支持具有“无限”斜率的线。也就是说,像x = 3这样的垂直线。您并不需要斜率,只需要标准化的方向矢量。对于垂直线,它是<0,1>。这就是为什么图形操作经常使用矢量数学的原因,因为计算更直接,并且不易出现奇点。起初看起来有点复杂,但是一旦你掌握了矢量操作,很多计算机图形任务就会变得更加容易。

用户回答回答于

起点 - (x0, y0)

终点 - (x1, y1)

我们需要(xt, yt)在从起点到终点的距离dt处找到一个点。

起点和终点之间的距离由下式给出 d = sqrt((x1 - x0)^2 + (y1 - y0)^2)

让距离的比例, t = dt / d

然后点 (xt, yt) = (((1 - t) * x0 + t * x1), ((1 - t) * y0 + t * y1))

0 < t < 1,点在线上。

何时t < 0,该点位于靠近的线外(x0, y0)

何时t > 1,该点位于靠近的线外(x1, y1)

扫码关注云+社区