Bagaimana saya bisa memproyeksikan titik 3D ke garis 3D?

20

Katakanlah saya memiliki garis yang didefinisikan oleh dua titik, Adan B, keduanya dalam bentuk (x, y, z). Titik-titik ini mewakili garis dalam ruang 3D.

Saya juga ada benarnya P, didefinisikan dalam format yang sama, yang tidak di telepon.

Bagaimana saya menghitung proyeksi titik itu ke garis? Saya menyadari bagaimana melakukan ini dalam 2D ​​tetapi 3D tampaknya memiliki bugger semua sumber daya di dalamnya.

EndOfTheZoners
sumber

Jawaban:

29

Anda hanya perlu memproyeksikan vektor APke vektor AB, lalu menambahkan vektor yang dihasilkan ke titik A.

Ini adalah salah satu cara untuk menghitungnya:

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

Formula ini akan bekerja dalam 2D ​​dan 3D. Bahkan ia bekerja di semua dimensi.

sam hocevar
sumber
terima kasih tuan Sam - bagaimana Anda mendapatkan formula di atas?
BKSpurgeon
2
Saya tidak mendapatkannya, itu adalah formula terkenal yang dapat Anda temukan di banyak buku pegangan.
sam hocevar
Apakah ada sampel tentang cara menulis itu dalam bahasa pemrograman seperti C ++?
Vinicius Rocha
1
@ViniciusdeMeloRocha dot akan menjadi a.x*b.x+a.y*b.y+a.z*b.z ...segalanya semudah operasi per-koordinat antara vektor.
Ocelot
4

Berikut cara cepat dan mudah untuk melakukannya dengan 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

Gunakan pelampung; Jika vektor Anda berisi bilangan bulat divisi akan menjadi divisi bilangan bulat, dan hasilnya akan salah.

caleb c.
sumber
1
/dot(ab,ab)redundan
Waldo Bronchart