数学笔记(二)之平面表示
2015-11-22 15:37
183 查看
关于平面的表示方法,之前也有些模糊的地方,在此顺便一记吧~
假设我们知道垂直于平面的法向量n,以及平面上的一点p0,如何使用这两个元素来表示该平面呢?
取平面上的任意一点p,并设d为从点p0到点p的向量,以坐标表示如下:
n = (xn, yn, zn)
p0 = (x0, y0, z0)
p = (x, y, z)
d = p - p0 = (x - x0, y - y0, z - z0)
由于n是垂直于平面的向量,所以n也垂直于平面上的任一向量(这里为d),即n和d的点乘为0:
n * d = 0
依然以坐标表示:
(xn, yn, zn) * (x - x0, y - y0, z - z0) = 0 =>
xn * (x - x0) + yn * (y - y0) + zn * (z - z0) = 0 =>
xn * x + yn * y + zn * z + (- xn * x0 - yn * y0 - zn * z0) = 0
如果设定
A = xn
B = yn
C = zn
D = - xn * x0 - yn * y0 - zn * z0
那么就有
A * x + B * y + C * z + D = 0
而以上便是平面的表示方法了~
(注:相关的一些向量知识可以参考这里)
而关于上面等式中的D,但就数值来看似乎是向量n和点p0做点乘,貌似没啥意义,但是如果我们设置k为从坐标原点到p0点的向量,则有:
k = (x0, y0, z0) - (0, 0, 0) = (x0, y0, z0)
那么
D = - xn * x0 - yn * y0 - zn * z0 = - (xn * x0 + yn * y0 + zn * z0) = - n * k
如果n是标准化向量(即模为1),那么D其实可以理解为坐标原点到平面的带符号距离,据此,我们也可以判断空间内任一点与平面的相对关系了~
拿cocos2d-x中的Plane类型举例,其使用的正是这种方法:
就这样了~
假设我们知道垂直于平面的法向量n,以及平面上的一点p0,如何使用这两个元素来表示该平面呢?
取平面上的任意一点p,并设d为从点p0到点p的向量,以坐标表示如下:
n = (xn, yn, zn)
p0 = (x0, y0, z0)
p = (x, y, z)
d = p - p0 = (x - x0, y - y0, z - z0)
由于n是垂直于平面的向量,所以n也垂直于平面上的任一向量(这里为d),即n和d的点乘为0:
n * d = 0
依然以坐标表示:
(xn, yn, zn) * (x - x0, y - y0, z - z0) = 0 =>
xn * (x - x0) + yn * (y - y0) + zn * (z - z0) = 0 =>
xn * x + yn * y + zn * z + (- xn * x0 - yn * y0 - zn * z0) = 0
如果设定
A = xn
B = yn
C = zn
D = - xn * x0 - yn * y0 - zn * z0
那么就有
A * x + B * y + C * z + D = 0
而以上便是平面的表示方法了~
(注:相关的一些向量知识可以参考这里)
而关于上面等式中的D,但就数值来看似乎是向量n和点p0做点乘,貌似没啥意义,但是如果我们设置k为从坐标原点到p0点的向量,则有:
k = (x0, y0, z0) - (0, 0, 0) = (x0, y0, z0)
那么
D = - xn * x0 - yn * y0 - zn * z0 = - (xn * x0 + yn * y0 + zn * z0) = - n * k
如果n是标准化向量(即模为1),那么D其实可以理解为坐标原点到平面的带符号距离,据此,我们也可以判断空间内任一点与平面的相对关系了~
拿cocos2d-x中的Plane类型举例,其使用的正是这种方法:
class CC_DLL Plane { public: // ... protected: Vec3 _normal; // the normal line of the plane float _dist; // original displacement of the normal }; PointSide Plane::getSide(const Vec3& point) const { float dist = dist2Plane(point); if (dist > 0) return PointSide::FRONT_PLANE; else if (dist < 0) return PointSide::BEHIND_PLANE; else return PointSide::IN_PLANE; }
就这样了~
相关文章推荐
- EM算法推导
- uint8_t , uint16_t,uint32_t,uint64_t
- 对nova进行api扩展
- 自定义Operation
- 设置App的启动页
- 【拔苗计划】linux学习笔记——netstat命令学习
- 剑指Offer-27-二叉排序树转双向链表
- 一、linux 指令集(显示系统信息、关机操作)
- HDU 4920 Matrix multiplication(简单矩阵相乘+技巧减少Mod次数)
- 1094. The Largest Generation (25)
- 51单片机中断详解(上)
- 20151113chattr ,lsattr 使用,设置和查看特殊权限
- 微信支付
- 1094. The Largest Generation (25)
- 教你如何在ubuntu15.04安装 RVM
- HDU 1209 Clock(模拟)
- 查询优化(一:Bookmark Lookup)
- php的延迟静态绑定
- 在centos7搭建上svn,并用svn和http访问
- 再谈沟通