2012-01-20 37 views
20

Cho phép nói rằng tôi có điểm (x, y, z) và mặt phẳng có điểm (a, b, c) và bình thường (d, e, f). Tôi muốn tìm điểm đó là kết quả của phép chiếu trực giao của điểm đầu tiên lên mặt phẳng. Tôi đang sử dụng điều này trong lập trình đồ họa 3D. Tôi muốn đạt được một số loại clipping vào máy bay.Làm cách nào để tìm phép chiếu trực giao của một điểm trên mặt phẳng

Trả lời

45

Các chiếu của một điểm q = (x, y, z) lên một chiếc máy bay đưa ra bởi một điểm p = (a, b, c) và bình thường n = (d, e, f)

q_proj = q - dot(q - p, n) * n 

tính này giả định rằng n là một vector đơn vị.

0

Tôi đã thực hiện chức năng này trong Qt sử dụng QVector3D:

QVector3D getPointProjectionInPlane(QVector3D point, QVector3D planePoint, QVector3D planeNormal) 
{ 
    //q_proj = q - dot(q - p, n) * n 
    QVector3D normalizedPlaneNormal = planeNormal.normalized(); 
    QVector3D pointProjection = point - QVector3D::dotProduct(point - planePoint, normalizedPlaneNormal) * normalizedPlaneNormal; 
    return pointProjection; 
} 
+0

này sử dụng các thuật toán tương tự như, câu trả lời được chấp nhận trước và sử dụng một ngôn ngữ không yêu cầu. Câu trả lời này chỉ thêm vào câu trả lời được chấp nhận là gì? –

Các vấn đề liên quan