如何将3D点投影到3D线上?


20

假设我有一条由两个点A和定义的线B,都以形式(x, y, z)。这些点代表3D空间中的一条线。

我也有一点 P,用相同的格式定义,不在线上。

我将如何计算该点在直线上的投影?我知道如何在2D中执行此操作,但是3D似乎在上面浪费了所有资源。

Answers:


29

您只需要将vector AP投影到vector上AB,然后将结果矢量添加到point即可A

这是一种计算方法:

A + dot(AP,AB) / dot(AB,AB) * AB

此公式适用于2D和3D。实际上,它适用于所有方面。


谢谢山姆先生-您是如何得出上述公式的?
BKSpurgeon '17

2
我没有得出它,它是一个众所周知的公式,您可以在许多手册中找到它。
sam hocevar '17

是否有关于如何使用C ++这样的编程语言编写示例的示例?
Vinicius Rocha

1
@ViniciusdeMeloRocha点a.x*b.x+a.y*b.y+a.z*b.z ...与向量之间的每个坐标操作一样简单。
Ocelot

4

这是在python中执行此操作的快速简便的方法:

from numpy import *
def ClosestPointOnLine(a, b, p):
    ap = p-a
    ab = b-a
    result = a + dot(ap,ab)/dot(ab,ab) * ab
    return result

使用浮点数;如果向量包含整数,则除法将为整数除法,结果将不正确。


1
/dot(ab,ab)是多余的
Waldo Bronchart '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.