Domanda

Ho una linea che esiste in 3d tra due punti noti: {X1, Y1, Z1} e {X2, Y2, Z2}.

So anche di avere una certa distanza per uno dei punti: D

Come posso determinare quali sono le coordinate del punto in cui mi trovo dopo aver spostato D da {X1, Y1, Z1}?

Grazie

È stato utile?

Soluzione

Supponendo di voler spostare la distanza D dal punto 1 al punto 2:

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

Il vettore di linea può essere descritto come:

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

La lunghezza della linea può essere determinata come:

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

Il versore della linea, noto anche come vettore dell'unità, può essere determinato come:

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

Il punto di destinazione PD può essere determinato come:

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

Si noti che P1 e v sono vettori e D è uno scalare

Altri suggerimenti

Per prima cosa, determina la lunghezza del segmento di linea:

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

Stai spostando D da P1 = (X1, Y1, Z1) verso P2 = (X2, Y2, Z2). Questo ti mette al punto (X3, Y3, Z3):

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

Dove lo espandi in 3 equazioni, una per ciascuna di X, Y e Z.

Funziona perché sei D / d tra P1 e P2. Verifica: dire D = d. Quindi dovresti essere esattamente in P2.

Prendi il vettore tra i due punti

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

Trasformalo in un vettore unitario che punta nella stessa direzione ma con lunghezza 1. Lo fai dividendo per la distanza tra i due punti:

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

Quindi moltiplicalo per D e aggiungi al punto originale per ottenere il nuovo punto.

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

Questo è un problema di combinazione lineare:

dist = distance (p1, p2)

viene data la distanza D

f = D / dist (coordinata frazionaria del punto D all'interno di LineSeg (p1, p2)

pD = LinearCombo (1-f, p1, f, p2) (coordinate della distanza del punto D da p1)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top