找到具有给定距离的线上的点

Emr*_*mre 18 language-agnostic graphics vector lines points

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

A. *_*evy 15

我建议将线转换为参数格式而不是点斜率.也就是说,线的参数函数沿着该线返回一些参数t的值的点.您可以将线表示为参考点,并使用向量表示通过该点的线的方向.这样,你只需从A点向前和向后移动d单位以获得其他积分.

由于您的线具有斜率m,因此其方向矢量<1,m>.因为它在x中每1个像素移动y个像素.您希望将该方向向量标准化为单位长度,以便除以向量的大小.

    magnitude = (1^2 + m^2)^(1/2)

    N = <1, m> / magnitude = <1 / magnitude, m / magnitude>

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

    f(t) = A + t*N

这使用矢量数学.具体而言,标量向量乘法(参数t和向量N)和向量加法(A和t*N).函数f的结果是沿线的点.你要找的两点是f(d)和f(-d).用您选择的语言实施.

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


Sen*_*cob 10

让我以简单的方式解释答案

起点 - (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)

  • 我在浏览了 5 个不同的页面后发现了最简单的解释 (3认同)