点到平面的投影算法备忘笔记

转自 http://blog.csdn.net/coollen_mmx/article/details/4200489 

已知一个平面,其上一点O(一般是中心点),平面法线N。平面外一点P,求P点在平面上的投影。

这个问题在解数学题的时候不需要多想,按照已知条件带入公式求值计算即可,到最后会化简成几个多项式,可以用多种方法求解。比较麻烦的是用编程的方法计算多项式是件很麻烦的事情,至少在下觉得写出来的代码不会太好看。

为了使解决问题的思路更适合变成代码,在设计变量上最好只使用一个变量。在这个问题中,可以通过一个变量就能表示出来的是P在法线N上的投影点P’。我们可以通过求得P’的坐标从而计算出P在平面上的投影。

P’ = O + k * N

使用向量点乘公式:a * b = |a| * |b| * cos<a,b>,可以得到:

P’P * P’O = | P’P | * |P’O| * cos<P’P, P’O>

= | P’P | * |P’O| * cos 90°

= 0

又 P’P = P - P’ = P - (O + N * k) = P - O - N * k

P’O = O + N * k - O = N * k

得 (P - O - N * k) * N * k = 0

又 P,O已知,代码中可以直接计算,可以设V = P – O, 并且k可以约去

得 (V – N * k) * N = 0

展开 <(V.x – N.x * k), (V.y – N.y * k), (V.z – N.z * k)> * <N.x, N.y, N.z> = 0

整理 k = (V.x * N.x + V.y * N.y + V.z * N.z) / N.x^2 + N.y^2 + N.z^2

又 N.x^2 + N.y^2 + N.z^2是N的长度的平方,N是法线,长度为1

得 k = V.x * N.x + V.y * N.y + V.z * N.z

使用上面的求P’的式子可以算出P’的坐标。把P在平面O上的投影记作P’’,则:

P’’ = O + P’P

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值