3D数学基础学习笔记(Unity3d)
最近学习unity3d基础知识,学到了3D数据,做下笔记,包含一些自己的理解,如有问题希望指出
一、向量
1.向量的定义
向量:有大小有方向的物理量 类名:Vector3
向量大小:向量的长度 计算: api:Vector3.magnitude
单位向量:长度为1的向量 计算:向量/向量的大小 api:Vector3.normalized
Vector3 unity3d 文档描述:用于表示 3D 向量和点。
向量既然有方向和大小,所以向量是一条线,Vector3对象作为向量时,表示向量的起点就是原点。
2.向量的运算
向量相减(结果为向量):向量A - 向量B = 向量BA, 长度为a点到b点的长度,方向为指向a。实线才是真的向量BA
应用:计算两点之间的距离和相对方向
向量相加(结果为向量):向量A + 向量B = 组成平行四边形的对角线
应用:物体的移动。 点a沿着向量B的方向移动向量B长度的距离
向量与标量乘除(结果为向量):k * (x, y, z) = (kx, ky, kz) (x, y, z)/k = (x/k, y/k, z/k)
应用:缩放向量的长度
二、三角函数
1.角度与弧度
2.角度与弧度转换公式
一周的弧度: =
所以:1弧度 = 180度/ 1角度 = /180度
API:弧度 = 角度数 * Mathf.Deg2Rad
角度 = 弧度数 * Mathf.Rad2Deg
3.三角函数
正弦 sinx = a / c API:Mathf.Sin(float radian) 注:参数要的是弧度
余弦 cosx = b/c API:Mathf.Cos(float radian) 注:参数要的是弧度
正切 tanx = a/b API:Mathf.Tan(float radian) 注:参数要的是弧度
应用:根据一边一角,计算另外一边长
4.反三角函数
反正弦 arcsin a/c = x API:Mathf.Asin(float ) 注:参数要的是 a/c
反余弦 arccos b/c = x API:Mathf.Acos(float ) 注:参数要的是
反正切 arctan a/b = x API:Mathf.Atan(float ) 注:参数要的是
应用:根据两个边长,计算角度
三、向量的点乘、叉乘
1.点乘
公式:各分量乘积和 (x1, y1, z1) * (x2, y2, z2) = x1x2 + y1y2 + z1z2
几何意义:向量a*向量b = |向量a| * |向量b| * cos<a, b>
将两个向量的大小相乘,然后乘以向量之间角度的余弦值
点乘结果类型:常量值
API:Vector3.Dot(向量a, 向量b)
注:单位向量的点乘结果等于两向量夹角的余弦值,方向完全相同,点乘结果为1,方向完全相反,结果为-1,互相垂直结果为0
应用:计算两个向量夹角
float dot = Vector3.Dot(a.normalized, b.normalized);
float angle = Mathf.Acos(dot) * Mathf.Rad2Deg;
注:点乘计算出的夹角最大不会超过180,若两个向量夹角为270,则计算出的结果为90,也就是说计算的结果并不是准确的,所以需要结合叉乘可以准确算出夹角
2.叉乘
公式:(x1, y1, z1) * (x2, y2, z2) = (y1*z2 - z1*y2, z1*x2 - x1*z2, x1*y2 - y1 * x2)
几何意义:结果为两个向量所组成面的垂直向量,模长为两向量模长乘积再乘夹角的正弦值
有:|result| = |a||b| sinx
叉乘结果类型:向量
API:Vector3.Cross(向量a, 向量b)
unity3d 可以使用左手规则确定结果向量的方向
应用:可以向量result 的方向判断 向量a 和 向量b的相对位置,也就是顺逆时针关系
(若b在a顺时针,向量result相对向上,b在a逆时针,向量result相对向下)
点乘和叉乘综合应用:计算两个向量的夹角 [先用点乘计算出夹角,再用叉乘计算出顺逆时针,根据顺逆时针360-夹角]
四、欧拉角与四元数
这两个都是用作物体的旋转
1.欧拉角
虽然使用 Vector3 来表示欧拉角对象,但并不是向量或点,只是表示在x,y,z上的旋转角度
优点:三个数字表达方位,占用空间小。
沿坐标轴旋转的单位为角度,符合人的思考方式
任意的三个数字都是合法的,不存在不合法的欧拉角
缺点:同一方位存在多个欧拉角描述
万向节死锁:万向锁详解_哔哩哔哩_bilibili
2.四元数
用来表示旋转,具体详细了解可以百度百科
API 类名:Quaternion
注:transform.rotation 就是Quaternion类型
注:由于四元数我们不好理解,而欧拉角好理解,所以我们在做旋转时,会使用欧拉角,但是unity3d旋转时使用的是四元数,所以需要将欧拉角和四元数进行转换
API:欧拉角-->四元数 Quaternion.Euler(30, 0, 0) 将x轴旋转30度转为四元数旋转
四元数左乘向量:结果:新的旋转后的向量
Vector3 point = new Vector3(0,0,10);
Vector3 new_point = Quaternion.Euler(30, 0, 0) * point;
new_point 就是 point沿x轴旋转30度后的新位置
四元数乘四元数:结果:新的四元数(两个四元数旋转的合并)
Quaternion r1 = Quaternion.Euler(30, 0, 0);
Quaternion r2 = Quaternion.Euler(30, 0, 0);
Quaternion r3 = r1 * r2; //最终r3是60度的旋转
五、总结[unity3d离线文档加速]
物体在世界中总归就是 移动、缩放、旋转
物体移动:transform.position 赋值就可以实现移动
物体旋转:transform.rotation 赋值就可以实现旋转
游戏使用案例:
npc自动移动到玩家左前方30度的位置(物体移动)
玩家是否在敌人的扇形视野范围内(判断夹角和距离)
敌人攻击玩家,先使自己朝向玩家(旋转)
unity3d官网上的在线文档和下载下来的离线文档都会比较慢。
离线文档下载:离线文档 - Unity 手册
然后再将离线文档处理一下:https://github.com/ilclpj/UnityOfflineDoc
3D数学基础学习笔记(Unity3d)相关推荐
- 机器学习数学基础学习笔记
机器学习数学基础学习笔记 1. 微积分 1.1 导数 一阶导数,是函数 的切线斜率 二阶导数,是切线斜率的变化速度,即曲线的弯曲程度,也称为"曲率"(curvature) 1.2 ...
- 3d数学基础学习总结
3d数学基础目录 第1章 简介 1.1 什么是3D数学 1.2 为什么选择本书 1.3 阅读本书需要的基础知识 1.4 概览 第2章 笛卡尔坐标系统 2.1 1D数学 2.2 2D笛卡尔数学 2.3 ...
- Unity3D学习笔记——Unity3D的窗口布局
本文取材于Unity3D中的Help→Unity Manual.我把其中觉得重要的东西摘出来方便自己学习,另外本文如果能给初学者带来一些帮助我会很高兴的. 首先介绍的是Project窗口 先来张图片观 ...
- A morphable model for the synthesis of 3D faces 学习笔记(未完)
目录标题 欢迎使用Markdown编辑器 〇.数据库 一. 建立人脸表示模型 二.人脸模型的处理 三.面部特征 四.形状模型与输入模型的对应 4.1 形状模型与照片的对应 4.2 形状模型与三维扫描图 ...
- Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换
一 :3d空间坐标系 x,y,z 轴 z轴方向确定有两种方式 左手坐标系和右手坐标系 左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向. 右手坐标系:伸开右 ...
- Substance 3D 视频学习笔记
官方:https://www.substance3d.com/ Assets 官方资源:https://substance3d.adobe.com/assets/allassets Substance ...
- arduino平台的3D打印机学习笔记
❤ 2018.8.22 开了个新坑,其实也不算是新坑,毕竟3d打印机的设想早已有之,只是一直缺少实(ma)践(ni),现在有时间有闲钱,所以就开始着手了. 我的计划是: 1.查找资料,熟悉marlin ...
- 【Unity 3D】学习笔记三十六:物理引擎——刚体
物理引擎就是游戏中模拟真是的物理效果.如两个物体发生碰撞,物体自由落体等.在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真. 刚体 刚体是一个很很中要的组件. 默认情况下,新创的 ...
- 机器学习 数学基础 学习笔记 (1) 导数
1.导数概念 导数(Derivative),也叫导函数值.又名微商,是微积分中的重要基础概念.当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δ ...
- 3D仿真学习笔记(七)-- 五轴精密数控机床坐标系设定
上图为一五轴精密数控机床结构示意图. 轴. 轴相互连接固定在Y轴拖板上,. 轴拖板相互垂直,工件安装在 轴上,传感器安装在主轴上.下图为精密数控机床拓扑结构. 1 五轴精密数控机床坐标系设定 建立机 ...
最新文章
- linux rm 提示io异常,Hadoop异常 java.io.IOException: Job status not available
- c#中byte数组0x_c# byte数组各种操作
- 从VMware ESX Server 4升级到ESXi 5
- python库_计算机二级教程 Python语言程序设计,第10章python第三方库概览
- 硅谷最有名的帮派:如果你不知道PayPal黑帮
- MATLAB中cif用于清除什么,cifti-matlab-master 能够对MRI数据进行功能成像 - 下载 - 搜珍网...
- 人工智能大幕开启 安防行业已成先头部队
- Matlab 字符串比较
- [ZJOI2016]大森林
- 基于JAVA+SpringMVC+Mybatis+MYSQL的学生健康信息管理系统
- windows server 2008中IIS7的功能模塊
- 《淘宝网开店 SEO 推广 营销 爆款 实战200招》——1.3 网上开店的热门行业有哪些...
- 2017马哥python高级实战班 培训推荐
- TensorRt - caffe中支持prelu
- USB虚拟串口(CDC)极限速度测试
- Maven 设置项目编码
- 想知道添加水印的软件哪个好?这2款软件简单又实用
- ESP32 触摸传感器应用方案简介
- 是面试官放水,还是公司太缺人?这都能过,字节跳动原来这么容易进...
- 将 EGL 代码与 DXGI 和 Direct3D 进行比较