Làm cách nào tôi có thể chiếu điểm 3D lên đường 3D?


20

Giả sử tôi có một dòng được xác định bởi hai điểm ABcả hai đều ở dạng (x, y, z). Những điểm này đại diện cho một dòng trong không gian 3D.

Tôi cũng có một điểm P, được định nghĩa theo cùng định dạng, đó không phải là trên dòng.

Làm thế nào tôi có thể tính toán hình chiếu của điểm đó lên đường thẳng? Tôi biết làm thế nào để làm điều này trong 2D nhưng 3D dường như đã làm hỏng tất cả các tài nguyên trên đó.

Câu trả lời:


29

Bạn chỉ cần chiếu vectơ APlên vectơ AB, sau đó thêm vectơ kết quả vào điểm A.

Đây là một cách để tính toán nó:

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

Công thức này sẽ hoạt động ở dạng 2D và 3D. Trong thực tế, nó hoạt động trong tất cả các kích thước.


cảm ơn bạn Sam - bạn đã rút ra công thức trên như thế nào?
BKSpurgeon

2
Tôi không lấy được nó, nó là một công thức nổi tiếng bạn có thể tìm thấy trong nhiều cuốn sổ tay.
sam hocevar

Có một ví dụ về cách viết nó trong một ngôn ngữ lập trình như C ++ không?
Vinicius Rocha

1
@ViniciusdeMeloRocha dot sẽ là a.x*b.x+a.y*b.y+a.z*b.z ...mọi thứ khác đơn giản như hoạt động trên mỗi tọa độ giữa các vectơ.
Ocelot

4

Đây là một cách nhanh chóng và dễ dàng để làm điều đó trong 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

Sử dụng phao; Nếu các vectơ của bạn chứa các số nguyên, phép chia sẽ là một phép chia số nguyên và kết quả sẽ không chính xác.


1
/dot(ab,ab)là dư thừa
Waldo Bronchart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.