3D数学基础(二)| 向量
3D数学基础:图形与游戏开发
前言
这是白玉无冰记录3D数学第二篇章,向量!往期目录如下:
3D数学基础(一) | 坐标系
在写之前,白玉无冰一直在思考如何去讲述向量,思来想去,还是以实际问题例子出发,去讲这个神奇的向量!
本文不打算讲过多的定义和推导,更多地以例子出发去探讨。如果需要更深入地理解,可参考文末给出的参考书籍与资料。
开始
基本定义
向量(vector)描述了方向和大小。向量也有自己的运算规则,向量的加减法与数乘的意义见下图。
除了向量间的加法,向量之间还存在着两种乘法:
点乘(Dot Product)
叉乘(Cross Product)
向量反射
已知:
入射向量
单位法线量
入射角与反射角相同
求:
反射向量
在反复横跳的瞄准线这篇文章也用到了反射向量的计算。
旋转2D角色
已知:
角色位置和朝向
目标位置
求:
角色往哪个方向旋转多少度可朝向目标位置
概况来说,求角度用点乘,求旋转方向用叉乘。
在 Cocos Creator 中的 Vec2 使用 signAngle 的逻辑也是如此。
// class Vec2
/**
* @en Get angle in radian between this and vector with direction.
* @zh 获取当前向量和指定向量之间的有符号角度。<br/>
* 有符号角度的取值范围为 (-180, 180],当前向量可以通过逆时针旋转有符号角度与指定向量同向。<br/>
* @param other specified vector
* @return The signed angle between the current vector and the specified vector (in radians); if there is a zero vector in the current vector and the specified vector, 0 is returned.
*/
public signAngle (other: Vec2) {const angle = this.angle(other);return this.cross(other) < 0 ? -angle : angle;
}
判断多边形凹凸点
已知:
多边形的顶点坐标(逆时针,简易多边形)
求:
判断每个点的凹凸性
巧用向量叉乘即可求解。
在多边形裁剪图片中的切耳法用到了这个判断。
判断三角形内的点
已知:
三角形三个点
其中一个共面的点
求:
该点是否在三角形内
判断点是否在三角形内,可以通过叉乘计算点与线的位置关系判断出。
在 GAMES 103-02
中提到,也可用法向量判断。
前后左右
已知:
各个飞机的坐标和黑色飞机的朝向。
求:
其他飞机与黑色飞机前后左右的关系?
解答:
点乘 -> 前后
叉乘 -> 左右
折纸效果
在【折纸效果!(2D)】中也涉及一些向量计算,这里搬运过来,详细讲解可点击文章链接查看。
分割多边形的点。向量间的点积正好可以帮助我们判断夹角问题。
求对称点同样可以运用向量计算。
求出该顶点与中点的向量
求出该点在触摸方向的单位向量的投影(点乘),这正好是距离的一半
求出对称点坐标(距离乘方向向量+起始点坐标)
在【3D折纸效果】同样也使用到向量相关的知识。
使用向量叉乘判断网格点在触摸轴的左边还是右边。
矢量和平面
本段摘自《游戏编程精粹2》中的2.2章节。
已知:
起点 终点
平面单位法线向量 和面上的一个点
求:相对于面的高度(点乘)
求:直接与平面相交点(投影到法向量,相似三角形)
求:到交点的距离(两种方法)
计算反射点
向量空间
本部分内容摘自《3D游戏与计算机图形学中的数学方法》1.4节,记录是为了更好的忘记。
向量的基
加上相互垂直条件,正交基
再加上单位长度限制,正交规范基。
自然数
讲到向量,这里再扯点其他和向量相关的。
自然数也可以分解成正交基向量表示。互质的自然数,正好与向量垂直对应。
结束
预期白玉无冰下一篇记录关于矩阵的笔记
3D数学基础(二)| 向量相关推荐
- [Unity3D学习]3D数学基础之向量
[Unity3D学习]3D数学基础之向量 2014.05.11 向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础. 一.向量 1.向量的数学定义 向量就是一个数字列表,对于程序员来说一个向量 ...
- 《3D数学基础》系列视频 1.5 向量的夹角
理解数学,理解代码! 大家好,我是老G! 今天为大家带来<3D数学基础>系列视频. 主要讲解:游戏开发中用到的3D数学知识,包括:定义,定理,推论. 也包括他们的推导过程,以及应用举例. ...
- 《3D数学基础系列视频》1.1向量基本概念
今天带来的是系列最新视频,关于向量的内容 本次视频,主要讲解一下向量的基本概念. 国内网盘: http://pan.baidu.com/s/1c0ldm5U 苹果iTunes U注册代码: 1班:EF ...
- 《3D数学基础》实践1 向量类代码分析
理解数学,理解代码! 大家好,我是老G! 今天为大家带来<3D数学基础>系列视频. 主要讲解:游戏开发中用到的3D数学知识,包括:定义,定理,推论. 也包括他们的推导过程,以及应用举例. ...
- 3D Math Primer for Graphics and Game Development -- 图形与游戏开发(3D数学基础) (简介)...
3D Math Primer for Graphics and Game Development //z 2014-04-28 13:18:20 L.247'38500 BG57IV3@XCL T20 ...
- 3D数学基础及坐标系统
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 3D数学基础——矩阵、欧拉角和四元数的相互转换与比较
矩阵.欧拉角和四元数的相互转换与比较 相互转换 这里只展示最终的转换结果,推导过程请参考<3D数学基础:图形与游戏开发> 欧拉角转换到矩阵 欧拉角描述了一个旋转序列,分别计算出给每个旋转的 ...
- 《3D数学基础》1.8 混合积
理解数学,理解代码! 大家好,我是老G! 今天为大家带来<3D数学基础>系列视频. 主要讲解:游戏开发中用到的3D数学知识,包括:定义,定理,推论. 也包括他们的推导过程,以及应用举例. ...
- 3d数学基础学习总结
3d数学基础目录 第1章 简介 1.1 什么是3D数学 1.2 为什么选择本书 1.3 阅读本书需要的基础知识 1.4 概览 第2章 笛卡尔坐标系统 2.1 1D数学 2.2 2D笛卡尔数学 2.3 ...
- 3d数学基础:图形和游戏开发(第2版)_游戏引擎编程需要哪些基本数学知识?
现今,想要从头写一个功能强大的3D引擎,个人的力量恐怕难以胜任,即使能力足够,时间恐怕也不允许.在这个美好的开源时代,你只需具备修改各种引擎的能力便足以满足开发游戏的各项需求.现代游戏引擎的复杂级别已 ...
最新文章
- Web的桌面提醒(Popup)
- java 构造器 血药主题_java中的构造器
- 据说有大神形容这是三句话学会C语言
- oracle: to_char,to_date
- 编写时钟aplet程序java,编写时钟 Applet 程序
- 使用脚本编写 Vim 编辑器,第 5 部分: 事件驱动的脚本编写和自动化
- 在linux上获得线程id的方法
- 分布式链接跟踪服务_微服务世界中的分布式跟踪
- Object C语法快速入门
- 《Vim实用技巧(第2版)》——1.4 执行、重复、回退
- 四川省计算机考试模拟试题,2020年自考计算机基础应用模拟试题
- jenkins+maven+svn+npm自动发布部署实践
- linux 内核专题— drv术语
- 应该根据哪些判断云服务器的好坏
- 计算机串口(RS232)的针脚定义
- Linux命令退格键变成^H的解决办法
- 小程序入口传参:关于带参数的小程序扫码进入的方法
- 西电计科操作系统实验
- 月嫂类地域性网站SEO挣钱案例
- docker volume用法
热门文章
- 在ubuntu上定时锁屏
- APISpace 手机号码归属地API
- VMware15pro安装Windows7虚拟机详细教程
- 视易服务器查看硬盘状态,Linux服务器使用Smartmontools检测硬盘状况 | 厘米天空
- usb转232串口线驱动android,usb-rs232线驱动下载、Z-tek usb转串口驱动 usb转串口驱动...
- JAVA 仿QQ聊天程序
- xlsx文件打开乱码_xlsx文件怎么打开乱码
- 银行排队叫号系统项目总结
- iOS9.3.3骚扰电话拦截黑名单数据库
- EndNote 文献管理软件安装包