3B noktayı 3B çizgiye nasıl yansıtabilirim?


20

Diyelim ki iki nokta ile tanımlanan bir çizgim var Ave Bikisi de formda (x, y, z). Bu noktalar 3B alanda bir çizgiyi temsil eder.

Ayrıca P, aynı formatta tanımlanan, çizgide olmayan bir noktam var.

Bu noktanın çizgiye izdüşümünü nasıl hesaplayabilirim? Bunu 2D olarak nasıl yapacağımın farkındayım, ancak 3D'nin tüm kaynakları bozduğu görülüyor.

Yanıtlar:


29

Sadece vektörü vektör APüzerine yansıtmanız AB, sonra ortaya çıkan vektörü noktaya eklemeniz yeterlidir A.

İşte bunu hesaplamanın bir yolu:

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

Bu formül 2D ve 3D olarak çalışacaktır. Aslında her boyutta çalışır.


teşekkür ederim Bay Sam - yukarıdaki formülü nasıl elde ettiniz?
BKSpurgeon

2
Ben türetmedim, birçok el kitabında bulabileceğiniz iyi bilinen bir formüldür .
sam hocevar

Bunu C ++ gibi bir programlama dilinde nasıl yazacağınıza dair bir örnek var mı?
Vinicius Rocha

1
@ViniciusdeMeloRocha noktası, a.x*b.x+a.y*b.y+a.z*b.z ...her şey vektörler arasındaki koordinat başına işlem kadar basittir.
Ocelot

4

Python'da yapmanın hızlı ve kolay bir yolu:

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

Şamandıra kullanın; Vektörlerinizde tamsayılar varsa bölüm bir tamsayı bölümü olur ve sonuçlar yanlış olur.


1
/dot(ab,ab)gereksiz
Waldo Bronchart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.