ฉันจะฉายจุด 3D ลงบนเส้น 3D ได้อย่างไร


20

สมมุติว่าฉันมีเส้นตรงที่กำหนดโดยสองจุดAและBทั้งสองอยู่ในรูปแบบ(x, y, z)ทั้งในรูปแบบจุดเหล่านี้แสดงบรรทัดในพื้นที่ 3 มิติ

ฉันยังมีประเด็น Pกำหนดในรูปแบบเดียวกันนั่นไม่ได้อยู่ในบรรทัด

ฉันจะคำนวณเส้นโครงของจุดนั้นบนเส้นตรงได้อย่างไร ฉันตระหนักถึงวิธีการทำเช่นนี้ในแบบ 2D แต่ 3D ดูเหมือนว่าจะมี bugger ทรัพยากรทั้งหมดอยู่ในนั้น

คำตอบ:


29

คุณก็ต้องเวกเตอร์โครงการAPบนเวกเตอร์แล้วเพิ่มเวกเตอร์ที่เกิดขึ้นไปยังจุดABA

นี่เป็นวิธีหนึ่งในการคำนวณ:

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

สูตรนี้จะทำงานใน 2 มิติและ 3 มิติ อันที่จริงมันทำงานได้ในทุกมิติ


ขอบคุณคุณ Sam - คุณได้สูตรข้างต้นมาอย่างไร
BKSpurgeon

2
ฉันไม่ได้รับมันเป็นสูตรที่รู้จักกันดีที่คุณสามารถหาได้ในคู่มือจำนวนมาก
sam hocevar

มีตัวอย่างเกี่ยวกับวิธีการเขียนในภาษาการเขียนโปรแกรมเช่น C ++ หรือไม่?
Vinicius Rocha

1
@ViniciusdeMeloRocha dot จะเป็นa.x*b.x+a.y*b.y+a.z*b.z ...อย่างอื่นตรงไปตรงมาเหมือนกับการดำเนินการประสานงานระหว่างเวกเตอร์
Ocelot

4

นี่คือวิธีที่รวดเร็วและง่ายดายในการทำในไพ ธ อน:

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

ใช้ลูกลอย หากเวกเตอร์ของคุณมีจำนวนเต็มการหารจะเป็นการหารจำนวนเต็มและผลลัพธ์จะไม่ถูกต้อง


1
/dot(ab,ab)ซ้ำซ้อน
Waldo Bronchart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.