算法概述
平面由一点 O(x0,y0,z0) 和法向量 n→=(n1,n2,n3) 定义,平面外一点为 Pout(xp,yp,zp) ,求 P 到平面的投影点Q的坐标
设点Q的坐标为
(xQ,yQ,zQ)
- 点Q在平面内,满足平面方程(平面的点法式方程)
n1(x−x0)+n2(y−y0)+n3(z−z0)=0 (1)
- PQ−→−//n→ ,满足xQ−xPn1=yQ−yPn2=zQ−zPn3 (2)
根据
以及
得到Q的坐标,这里值得注意的是,求解(3)(4)的时候 n1 不能为0,当 n1 为0时 yQ=yP 且 zQ=zP
程序实现
下面用matlab实现上面这段程序
function point =compute_nearest_point_on_surface2(p,N,p_out) x=(N(1)*(p(1)*N(1)+p(2)*N(2)+p(3)*N(3))+(N(2)^2+N(3)^2)*p_out(1)-N(1)*N(2)*p_out(2)-N(1)*N(3)*p_out(3))/(N(1)^2+N(2)^2+N(3)^2); if (N(1)~=0) y=N(2)/N(1)*(x-p_out(1))+p_out(2); z=N(3)/N(1)*(x-p_out(1))+p_out(3); else y=p_out(2); z=p_out(3); end point=[x,y,z]; end
well done!
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229222.html原文链接:https://javaforall.net
