数学笔记(二)之平面表示
关于平面的表示方法,之前也有些模糊的地方,在此顺便一记吧~
假设我们知道垂直于平面的法向量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;
}
就这样了~
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel框架查询构造器常见用法总结
- laravel 解决多库下的DB::transaction()事务失效问题
- laravel 实现上传图片到本地和前台访问示例
- laravel框架模型中非静态方法也能静态调用的原理分析
- Laravel 5.2 文档 数据库 —— 起步介绍
- laravel csrf排除路由,禁止,关闭指定路由的例子
- thinkphp框架类库扩展操作示例
- Laravel ORM 数据model操作教程
- Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
- laravel 解决Eloquent ORM的save方法无法插入数据的问题
- laravel框架中控制器的创建和使用方法分析
- php 使用expat方式解析xml文件操作示例
- laravel利用中间件做防非法登录和权限控制示例
- laravel框架中表单请求类型和CSRF防护实例分析
- Yii框架getter与setter方法功能与用法分析