Unity游戏开发客户端面经——数学(初级)
Posted 正在奋斗中的小志
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity游戏开发客户端面经——数学(初级)相关的知识,希望对你有一定的参考价值。
前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 数学 常问问题总结,有帮助的可以收藏。
1. 四元数与欧拉角
1.1 四元数概念
四元数(以后不特指四元数=单位四元数)是四维空间中一个超球上面的点,满足w²+x²+y²+z²=1;而纯四元数是四维空间在w=0时的一个子空间的点,形式为0, q,特别注意的是纯四元数与四元数是不同的概念。
四元数是复数虚部扩展的结果,复数的虚部为1个,而四元数虚部有3个,且两两互相正交,其中实部是cosθ/2,而虚部为一个単位轴乘以sinθ/2。
四元数自由度并没有四个维度,由于存在w²+x²+y²+z²=1这个约束,它的自由度其实只有3,且每个四元数可以对应一个特征向量,即n。
四元数Quaternion的作用
表示旋转,因此旋转角度计算时用到四元数。
详细请看:
【Unity编程】Unity中关于四元数的API详解 - AndrewFan - 博客园本文总结了Unity中关于Quaternion(四元数)的API使用方法以及给出部分示例。https://www.cnblogs.com/driftingclouds/p/6626183.html
1.2 欧拉角概念
欧拉角是由三个角组成,这三个角分别是Yaw,Pitch,Roll。很难翻译这三个单词,Yaw 表示绕y轴旋转的角度,Pitch表示绕x轴旋转的角度,Roll表示绕z轴旋转的角度。也就是说,任意的旋转角度都可以通过这三次按照先后顺序旋转得到。矩阵很难让人具体形象表示,欧拉角就容易多了。注意可能很多地方三个角的先后次序不一样。
1.3 四元数对于欧拉角的优点
- 避免万向节死锁
- 两个四元数之间更容易插值
- 能进行增量旋转
- 给定方位的表达式有两种,互为负。
1.4 欧拉角的万向节死锁
我们依次绕物体坐标系的X轴、Y轴、Z轴旋转,当Y轴旋转了90度之后,Z就会指向原来的X轴。这样一来,我们事实上只绕了X轴和Y轴两个轴旋转,第三根轴的自由度就丢失了。
2. 点乘
概念
点乘,也叫向量的内积、数量积。
描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影。
计算方式
向量a·向量b=|a||b|cos<a,b>
求两个向量的夹角(用单位向量)
3. 叉乘
概念
叉乘,也叫向量的外积、向量积,得到的向量垂直于原来的两个向量。
计算方式
|向量c|=|向量a×向量b|=|a||b|sin<a,b>
A×B = -B×A
这里点乘叉乘只记录了几何角度,详细请看:
向量的点乘和叉乘区别及几何意义https://baijiahao.baidu.com/s?id=1736495807922098016&wfr=spider&for=pc
4. 向量归一化
向量归一化即将向量的方向保持不变,大小归一化到1。
5. 判断一个点在矩形内外
详细请看:
6. 判断一个点在三角形内外
1.面积法
求三角形面积的方法就可以用上面提到的利用叉积就行了,注意记得加 上绝对值,因为叉积可能为负。还有种简单的方法是利用内角和为 180 °
2.同侧法
若点P在点A、B、C内,则ABXAP,BCxBP,CAxCP结果都为正(负),则可以认为P在A、B、C内,若任意一个结果不同则P在ABC外。(因为正负看的sin夹角的大小,在两个夹角小于90°的情况下,“右手定则”来判定,即右手向第二个因数弯曲,看大拇指是否改变,同向为正,异向为负。)
7. 判断一个对象B在对象A的前后左右(点乘叉乘应用)
点乘前后,叉乘左右。
7.1前后判断
生成两个向量:
- 对象A自身为原点,指向面向前方的方向。
- 对象A自身为原点,指向对象B的方向。
两个向量点乘,正为B在A的前方,负为B在A的后方,0为左右两侧。
(点乘正负看向量夹角,小于90°为正,大于90°则为负,等于90°正为水平两侧)
7.2左右判断
向量A 叉乘 向量B,结果为正,B在A的左侧,结果为负,B在A的右侧。
(注意:Unity当中使用左手,因为Unity使用的是左手坐标系,叉乘方向相反)
假设向量A和B 都在xz平面上
向量A叉乘向量B
y大于0 证明B在A右侧
y小于0 证明B在A左侧
详细请看:
希望此篇文章可以帮助到更多的同学
Unity游戏开发客户端面经,六万字面经知识点,一篇就够了
目前这是记录一些被常问的面经,面向初级,总结了大约六万字的常问知识点,有各种大佬的链接可以深入的了解。希望可以帮助正在准备八股的同学们。
C#:Unity游戏开发客户端面经——C#(初级)_正在奋斗中的小志的博客-CSDN博客_c# unity
数据结构:Unity游戏开发客户端面经——数据结构(初级)_正在奋斗中的小志的博客-CSDN博客
lua:Unity游戏开发客户端面经——lua(初级)_正在奋斗中的小志的博客-CSDN博客
算法:Unity游戏开发客户端面经——算法(初级)_正在奋斗中的小志的博客-CSDN博客_拉绳算法
设计模式:Unity游戏开发客户端面经——设计模式(初级)_正在奋斗中的小志的博客-CSDN博客
Unity:Unity游戏开发客户端面经——Unity(初级)_正在奋斗中的小志的博客-CSDN博客
性能优化:Unity游戏开发客户端面经——性能优化(初级)_正在奋斗中的小志的博客-CSDN博客
热更新:Unity游戏开发客户端面经——热更新(初级)_正在奋斗中的小志的博客-CSDN博客
网络 :Unity游戏开发客户端面经——网络(初级)_正在奋斗中的小志的博客-CSDN博客
数学:Unity游戏开发客户端面经——数学(初级)_正在奋斗中的小志的博客-CSDN博客
操作系统:Unity游戏开发客户端面经——操作系统(初级)_正在奋斗中的小志的博客-CSDN博客
希望此篇文章可以帮助到更多的同学
以上是关于Unity游戏开发客户端面经——数学(初级)的主要内容,如果未能解决你的问题,请参考以下文章