문제

{x1, y1, z1}과 {x2, y2, z2} 사이에있는 3D에 존재하는 선이 있습니다.

나는 또한 내가 포인트 중 하나에 대한 특정 거리라는 것을 알고 있습니다 : D

{x1, y1, z1}에서 d를 이동 한 후에 내가있는 지점의 좌표를 어떻게 결정할 수 있습니까?

감사

도움이 되었습니까?

해결책

거리 1에서 지점 2로 이동한다고 가정하면 :

P1 = [ X1, Y1, Z1 ]
P2 = [ X2, Y2, Z2 ]

라인 벡터는 다음과 같이 설명 할 수 있습니다.

V = P2 - P1 = [ Xv = X2 - X1, Yv = Y2 - Y1, Zv = Z2 - Z1 ]

선 길이는 다음과 같이 결정될 수 있습니다.

VL = SQRT(Xv^2 + Yv^2 + Zv^2)     // ^2 = squared

라인의 VERSOR AKA 단위 벡터는 다음과 같이 결정할 수 있습니다.

v = V / VL = [Xv / VL, Yv / VL, Zv / VL]

표적 지점 PD는 다음과 같이 결정할 수 있습니다.

Pd = P1 + D * v // Starting from P1 advance D times v

P1과 V는 벡터이고 D는 스칼라입니다.

다른 팁

먼저, 라인 세그먼트의 길이를 결정하십시오.

d=sqrt((X1-X2)^2+(Y1-Y2)^2+(Z1-Z2)^2))

p1 = (x1, y1, z1)에서 p2 = (x2, y2, z2)로 d를 움직입니다. 이것은 당신을 지점 (x3, y3, z3)에 놓습니다.

{XYZ}3={XYZ}1+(D/d)*({XYZ}2-{XYZ}1})

여기서 x, y 및 z 각각에 대해 하나의 방정식으로 확장합니다.

이것은 P1과 P2 사이의 D/D이기 때문에 작동합니다. 점검 : d = d라고 말하십시오. 그런 다음 정확히 P2에 있어야합니다.

두 지점 사이의 벡터를 취하십시오

<X2-X1, Y2-Y1, Z2-Z1>

그것을 같은 방향으로 가리키는 단위 벡터로 바꾸지 만 길이 1으로 바꿉니다.

         <X2-X1, Y2-Y1, Z2-Z1>
---------------------------------------
sqrt((X2-X1)^2 + (Y2-Y1)^2 + (Z2-Z1)^2)

그런 다음 D를 곱한 다음 원래 지점에 추가하여 새로운 포인트를 얻습니다.

                            <X2-X1, Y2-Y1, Z2-Z1>
(X1, Y1, Z1) + D * ---------------------------------------
                   sqrt((X2-X1)^2 + (Y2-Y1)^2 + (Z2-Z1)^2)

이것은 선형 조합 문제입니다.

Dist = 거리 (P1, P2)

거리 d가 주어집니다

f = d / dist (lineseg 내에서 점 D의 분수 좌표 (p1, p2)

PD = LinearCombo (1-F, P1, F, P2) (P1에서 점 거리 D의 좌표)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top