Pergunta

I tem uma linha que existe em 3d que se encontra entre dois pontos conhecidos:. {X1, Y1, Z1} e {X2, Y2, Z2}

Eu também sei que eu sou uma certa distância para um dos pontos: D

Como posso determinar o que as coordenadas do ponto onde eu sou depois de se mudar D de {X1, Y1, Z1}?

Graças

Foi útil?

Solução

Assumindo que você deseja mover a distância D do ponto 1 ao ponto 2:

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

O vector de linha pode ser descrito como:

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

O comprimento da linha pode ser determinada como:

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

versor da linha aka o vetor unitário pode ser determinada como:

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

O PD ponto alvo pode ser determinada como:

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

Por favor note que P1 e v são vetores e D é um escalar

Outras dicas

Primeiro, determinar o comprimento do segmento de linha:

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

Está movendo D a partir de P1 = (X1, Y1, Z1) para P2 = (X2, Y2, Z2). Isso você coloca no ponto (X3, Y3, Z3):

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

Onde você expandir isso em 3 equações, uma para cada um dos X, Y e Z.

Isso funciona porque você é D / d do caminho entre P1 e P2. Entrada: Say D = d. Então você deve ser exatamente P2.

Leve o vector entre os dois pontos

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

transformar isso em um apontar vetor unitário na mesma direção, mas com comprimento 1. Você faz isso através da divisão pela distância entre os dois pontos:

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

Em seguida, multiplique o resultado por D e adicionar ao seu ponto original para obter o novo ponto.

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

Este é um problema combinação linear:

= dist distância (p1, p2)

distância D é dado

f = D / dist (fraccionada de coordenadas do ponto D dentro LineSeg (p1, p2)

= pD LinearCombo (1-F, P1, F, p2) (coordenadas do ponto de distância D p1)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top