3D 점을 3D 선에 투영하려면 어떻게해야합니까?


20

하자 내가 두 점에 의해 정의되는 라인을 가지고 말을 A하고 B두 형태 (x, y, z). 이 점들은 3D 공간에서 선을 나타냅니다.

나는 또한 P같은 형식으로 정의 된 점이 있는데, 그것은 줄에 없습니다.

선에 대한 해당 점의 투영을 어떻게 계산합니까? 2D 에서이 작업을 수행하는 방법을 알고 있지만 3D는 모든 리소스를 디버깅하는 것으로 보입니다.

답변:


29

벡터 AP를 벡터 AB에 투영 한 다음 결과 벡터를 포인트에 추가하면됩니다 A.

이를 계산하는 한 가지 방법이 있습니다.

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

이 수식은 2D 및 3D에서 작동합니다. 실제로 그것은 모든 차원에서 작동합니다.


Mr Sam 감사합니다-위의 공식을 어떻게 도출 했습니까?
BKSpurgeon

2
나는 그것을 파생시키지 않았다, 그것은 당신이 많은 핸드북에서 찾을 수 있는 잘 알려진 공식 이다.
sam hocevar

C ++과 같은 프로그래밍 언어로 작성하는 방법에 대한 샘플이 있습니까?
Vinicius Rocha

1
@ViniciusdeMeloRocha 도트는 a.x*b.x+a.y*b.y+a.z*b.z ...벡터 간의 좌표 별 작업만큼 간단합니다.
오셀롯

4

파이썬에서 빠르고 쉬운 방법은 다음과 같습니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.