3d ортогональная проекция на плоскость - PullRequest
3 голосов
/ 27 сентября 2011

У меня есть точка в 3d P (x, y, z) и плоскость обзора Ax + By + Cz + d = 0.Точка на плоскости - это E. Теперь я хочу спроецировать эту трехмерную точку на эту плоскость и получить 2d координаты спроецированной точки относительно точки E.

P(x,y,z) = 3d point which i want to project on the plane.
Plane Ax + By + Cz  + d  = 0 , so normal n = (A,B,C)
E(ex,ey,ez) = A point in plane ( eye pos of camera )

То, что я сейчас делаю, - это получитьБлижайшая точка на плоскости из точки P. затем вычитаю эту точку, чтобы подозревать, что это правильно.

, пожалуйста, помогите мне. Спасибо.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Ближайшая точка находится вдоль нормали к плоскости. Поэтому определите точку Q, которая смещена относительно P вдоль этой нормали.

Q = P - n*t

Тогда решите для t, что помещает Q в плоскость:

dot(Q,n) + d = 0
dot(P-n*t,n) + d = 0
dot(P,n) - t*dot(n,n) = -d
t = (dot(P,n)+d)/dot(n,n)

Где точка ((x1, y1, z1), (x2, y2, z2)) = x1 * x2 + y1 * y2 + z1 * z2

0 голосов
/ 27 сентября 2011

Вы получаете точку на плоскости как p0 = (0, 0, -d/C).Я предполагаю, что нормаль имеет единицу длины.

Часть p в том же направлении, что и n, равна dot(p-n0, n) * n + p0, поэтому проекция равна p - dot(p-p0,n)*n.

Если вы хотите получить некоторые координаты на плоскости, вы должны предоставить основу/система координат.Например, два линейных независимых вектора, которые охватывают плоскость.Координаты зависят от этих базисных векторов.

...