Come posso proiettare un punto 3D su una linea 3D?


20

Diciamo che ho una linea definita da due punti Ae B, entrambi nel modulo (x, y, z). Questi punti rappresentano una linea nello spazio 3D.

Ho anche un punto P, definito nello stesso formato, che non è sulla linea.

Come calcolerei la proiezione di quel punto sulla linea? Sono a conoscenza di come farlo in 2D, ma il 3D sembra aver incastrato tutte le risorse su di esso.

Risposte:


29

Devi semplicemente proiettare il vettore APsul vettore AB, quindi aggiungere il vettore risultante al punto A.

Ecco un modo per calcolarlo:

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

Questa formula funzionerà in 2D e in 3D. In effetti funziona in tutte le dimensioni.


grazie signor Sam - come hai ottenuto la formula sopra?
BKSpurgeon,

2
Non l'ho derivato, è una formula ben nota che puoi trovare in molti manuali.
sam hocevar,

C'è un esempio su come scriverlo in un linguaggio di programmazione come C ++?
Vinicius Rocha,

1
Il punto @ViniciusdeMeloRocha sarebbe a.x*b.x+a.y*b.y+a.z*b.z ...tutto il resto semplice come l'operazione per coordinata tra i vettori.
Ocelot,

4

Ecco un modo semplice e veloce per farlo in Python:

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

Usa galleggianti; Se i tuoi vettori contengono numeri interi, la divisione sarà una divisione intera e i risultati non saranno corretti.


1
/dot(ab,ab)è ridondante
Waldo Bronchart il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.