3D游戏与计算机图形学中的数学方法-点线面
《易传·系辞上传》:”易有太极,是生两仪,两仪生四象,四象生八卦。”
借用一下古代先人们的智慧引一下本文的主题-三维图形中的点线面,在三维几何中也有一句话可以和上面的话相对应:由点成线,由线成面,由面成体,由体成形。
点向量和方向向量
首先我们要明确在三维空间中表示点的点向量和表示方向的方向向量的区别,例如A(x,y,z)可以表示一个点向量,而OA(x,y,z)就表示一个方向向量。方向向量在平移过程中将保持不变。
3D空间中的直线
3维空间中有两个点P1和P2,那么通过这两个点的直线可以定义为:P(t) = (1-t)P1 + tP2,其中t可以是任意实数。P1和P2之间的线段对应于t在0到1之间的值。
射线是指只有一个端点并且在给定方向V上无限延伸的直线。射线的参数方程为:P(t) = P0+tV,其中t的值大于0。
可以看出,无论是直线还是射线,都可以由一个点加上指向而构成的。
两条直线的关系
在同一平面里的两条直线,它们的关系有两种,相交或者平行。当然重合也是包含在相交里面的。
但是在三维世界里,加入了空间的概念,所以两条直线的关系又增加了一种,那就是异面。
两条直线如下所示:
P(s) = P0+sVP
Q(t)=Q0+tVQ
其中s和t可以是任意实数。
3D空间中的平面
对于给定的3D点P0和法向量N,那么经过P0且与N垂直的平面可以定义为满足方程N.(P-P0)=0的点的集合。如下图所示:
平面方程可以表示为Ax+By+Cz+D=0 , 其中A,B,C是法向量N的x,y,z的分量,D = -N . P0 。
平面与直线的关系
(1)直线在平面内 即直线和平面有无数个公共点。
(2)直线和平面相交 即直线和平面有且只有一个公共点(垂直也是一种相交)。
(3)直线和平面平行 即直线和平面没有公共点。
平面与平面的关系
在3维空间中平面和平面之间的关系就类似于2维空间中直线和直线的关系:
(1)两个平面相交(重合是一种特殊的相交)。
(2)两个平面平行。
3D游戏与计算机图形学中的数学方法-点线面的更多相关文章
- 3D游戏与计算机图形学中的数学方法-变换
1变换 在3D游戏的整个开发过程中,通常需要以某种方式对一系列的向量进行变换.通常用到的变换包括平移,缩放和旋转. 1.1通用变换 通常可将n x n可逆矩阵M看成是一个从坐标系到另一个坐标系的变换矩 ...
- 3D游戏与计算机图形学中的数学方法-四元数
说实话关于四元数这一节真的是不好懂,因为里面涉及到好多数学知识,单说推出来的公式就有很多.不怕大家笑话,对于四元数的学习我足足花了两天的时间,包括整理出这篇文章.在前面一章我写到了“变换”,这也是总结 ...
- 3D游戏与计算机图形学中的数学方法-视截体
视截体用来表示一个空间的范围,位于这个空间范围内的三维场景的任何物体都可以被看到. 视截体由六个平面围成,其中的四个平面与场景的边界相对应,分别被称为左,右,底,顶视截面.另外两个平面称为近视截面和远 ...
- Mathematics for Computer Graphics数学在计算机图形学中的应用 [转]
最近严重感觉到数学知识的不足! http://bbs.gameres.com/showthread.asp?threadid=10509 [译]Mathematics for Computer Gra ...
- 3D游戏开发之UE4中的集合:TSet容器
好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集. 一.TSet<T>是什么 UE4中,除了TArray动态数组外,还提供了各种各样的模板容器.这一节,我们就介绍集合容 ...
- 计算机图形学中使用Turbo C++画图步骤
一.下载安装Turbo C++ 我安装的是Turbo C++ 3.2.2.0下载链接 二.画图 1.打开Turbo C++,点击右下角start turbo C++ 2.点击file ->new ...
- JS中的数学方法
1 . Math.ceil() 向上取整 2. Math.floor() 向下取整 3. Math.round() 四舍五入取整 4. Math.random() 生成 ...
- Java中的数学方法
直接用代码 public class TestNumber { public static void main(String[] args) { float f1 = 5.4f; float f2 = ...
- 计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.
本书參照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: ...
随机推荐
- laravel中间件简单使用
laravel内置了一个中间件来验证用户是否经过认证,如果用户没有经过认证,中间件会将用户重定向到登录页面,否则如果用户经过认证,中间件就会允许请求继续往前进入下一步操作. 当然,除了认证之外,中间件 ...
- sliverlight资源文件的URI调用
这里主要介绍三种方式:1.将文件编译进dll:2.打包在XAP中:3.放在XAP包外,其所在目录下. 这里就将三张图片以不同的方式调用来作为例子: 一.编译进DLL 默认情况下,复制到项目中的资源都是 ...
- [na]二层+tcp/udp数据包格式
标准:6+6+2+3 =17 3 思科:6+6+2+3+3=20 6 ip首部格式 tcp首部格式
- mongoose中的流查询stream query
mongoose中的流查询stream query,功能类似于php中的mysql_fetch_array,每次从集合中获取一条记录(文档) var cursor = Person.find({ oc ...
- C++11 随机数
C++11带来诸多特性,random就是其一. 随机数由生成器和分布器结合产生 生成器generator:能够产生离散的等可能分布数值(需要种子,不然每次生存的随机数都一样) 分布器distribut ...
- 安装grub到U盘
转自:http://hi.baidu.com/leeagle/item/6d022afc64bf7f5ec8f33743 安装GRUB到U盘 关键的几步是:3.激活/dev/sdb2 ,这步很重要,如 ...
- spring使用rssfeed
spring使用rssfeed import org.springframework.stereotype.Controller; import org.springframework.web.bin ...
- 分享一款基于jquery的圆形动画按钮
之前为大家介绍过一款纯css3实现的圆形旋转分享按钮.今天要给大家带来一款基于jquery的圆形动画按钮.这款按钮鼠标经过的时候以边框转圈,然后逐渐消息,在实例中给出了四种颜色的demo.效果图如下: ...
- linux内核支持U-disk和U转串
配置内核 make menuconfig,选中device驱动 Device Drivers ---->USB support--->USB Serial Converter suppor ...
- linux下使用yum安装telnet
参考文章: http://futeng.iteye.com/blog/2039490?utm_source=tuicool&utm_medium=referral