하자 내가 두 점에 의해 정의되는 라인을 가지고 말을 A
하고 B
두 형태 (x, y, z)
. 이 점들은 3D 공간에서 선을 나타냅니다.
나는 또한 P
같은 형식으로 정의 된 점이 있는데, 그것은 줄에 없습니다.
선에 대한 해당 점의 투영을 어떻게 계산합니까? 2D 에서이 작업을 수행하는 방법을 알고 있지만 3D는 모든 리소스를 디버깅하는 것으로 보입니다.
하자 내가 두 점에 의해 정의되는 라인을 가지고 말을 A
하고 B
두 형태 (x, y, z)
. 이 점들은 3D 공간에서 선을 나타냅니다.
나는 또한 P
같은 형식으로 정의 된 점이 있는데, 그것은 줄에 없습니다.
선에 대한 해당 점의 투영을 어떻게 계산합니까? 2D 에서이 작업을 수행하는 방법을 알고 있지만 3D는 모든 리소스를 디버깅하는 것으로 보입니다.
답변:
벡터 AP
를 벡터 AB
에 투영 한 다음 결과 벡터를 포인트에 추가하면됩니다 A
.
이를 계산하는 한 가지 방법이 있습니다.
A + dot(AP,AB) / dot(AB,AB) * AB
이 수식은 2D 및 3D에서 작동합니다. 실제로 그것은 모든 차원에서 작동합니다.
a.x*b.x+a.y*b.y+a.z*b.z ...
벡터 간의 좌표 별 작업만큼 간단합니다.
파이썬에서 빠르고 쉬운 방법은 다음과 같습니다.
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
수레를 사용하십시오. 벡터에 정수가 포함되면 나누기가 정수 나누기이므로 결과가 올바르지 않습니다.
/dot(ab,ab)
중복