最近学习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.1 导数 一阶导数,是函数 的切线斜率 二阶导数,是切线斜率的变化速度,即曲线的弯曲程度,也称为"曲率"(curvature) 1.2 ...

  2. 3d数学基础学习总结

    3d数学基础目录 第1章 简介 1.1 什么是3D数学 1.2 为什么选择本书 1.3 阅读本书需要的基础知识 1.4 概览 第2章 笛卡尔坐标系统 2.1 1D数学 2.2 2D笛卡尔数学 2.3 ...

  3. Unity3D学习笔记——Unity3D的窗口布局

    本文取材于Unity3D中的Help→Unity Manual.我把其中觉得重要的东西摘出来方便自己学习,另外本文如果能给初学者带来一些帮助我会很高兴的. 首先介绍的是Project窗口 先来张图片观 ...

  4. A morphable model for the synthesis of 3D faces 学习笔记(未完)

    目录标题 欢迎使用Markdown编辑器 〇.数据库 一. 建立人脸表示模型 二.人脸模型的处理 三.面部特征 四.形状模型与输入模型的对应 4.1 形状模型与照片的对应 4.2 形状模型与三维扫描图 ...

  5. Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换

    一 :3d空间坐标系  x,y,z 轴 z轴方向确定有两种方式 左手坐标系和右手坐标系 左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向. 右手坐标系:伸开右 ...

  6. Substance 3D 视频学习笔记

    官方:https://www.substance3d.com/ Assets 官方资源:https://substance3d.adobe.com/assets/allassets Substance ...

  7. arduino平台的3D打印机学习笔记

    ❤ 2018.8.22 开了个新坑,其实也不算是新坑,毕竟3d打印机的设想早已有之,只是一直缺少实(ma)践(ni),现在有时间有闲钱,所以就开始着手了. 我的计划是: 1.查找资料,熟悉marlin ...

  8. 【Unity 3D】学习笔记三十六:物理引擎——刚体

    物理引擎就是游戏中模拟真是的物理效果.如两个物体发生碰撞,物体自由落体等.在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真. 刚体 刚体是一个很很中要的组件. 默认情况下,新创的 ...

  9. 机器学习 数学基础 学习笔记 (1) 导数

    1.导数概念 导数(Derivative),也叫导函数值.又名微商,是微积分中的重要基础概念.当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δ ...

  10. 3D仿真学习笔记(七)-- 五轴精密数控机床坐标系设定

    上图为一五轴精密数控机床结构示意图. 轴. 轴相互连接固定在Y轴拖板上,. 轴拖板相互垂直,工件安装在  轴上,传感器安装在主轴上.下图为精密数控机床拓扑结构. 1 五轴精密数控机床坐标系设定 建立机 ...

最新文章

  1. linux rm 提示io异常,Hadoop异常 java.io.IOException: Job status not available
  2. c#中byte数组0x_c# byte数组各种操作
  3. 从VMware ESX Server 4升级到ESXi 5
  4. python库_计算机二级教程 Python语言程序设计,第10章python第三方库概览
  5. 硅谷最有名的帮派:如果你不知道PayPal黑帮
  6. MATLAB中cif用于清除什么,cifti-matlab-master 能够对MRI数据进行功能成像 - 下载 - 搜珍网...
  7. 人工智能大幕开启 安防行业已成先头部队
  8. Matlab 字符串比较
  9. [ZJOI2016]大森林
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的学生健康信息管理系统
  11. windows server 2008中IIS7的功能模塊
  12. 《淘宝网开店 SEO 推广 营销 爆款 实战200招》——1.3 网上开店的热门行业有哪些...
  13. 2017马哥python高级实战班 培训推荐
  14. TensorRt - caffe中支持prelu
  15. USB虚拟串口(CDC)极限速度测试
  16. Maven 设置项目编码
  17. 想知道添加水印的软件哪个好?这2款软件简单又实用
  18. ESP32 触摸传感器应用方案简介
  19. 是面试官放水,还是公司太缺人?这都能过,字节跳动原来这么容易进...
  20. 将 EGL 代码与 DXGI 和 Direct3D 进行比较

热门文章

  1. ActivityGroup简单介绍
  2. Unity3D开发资料
  3. delphi2007、2010无法二次启动,报错 EditorLineEnds.ttr 另一个程序正在使用此文件
  4. 各行各业,各种资源,淘宝售卖的各种资料,全部分享了 !
  5. sql prompt插件的安装
  6. Android 文件md5校验
  7. 前端开发-技术设计文档编写规范
  8. SpringBoot开发的java后台管理系统
  9. 硅谷也疯狂 IT互联网进入中美跨境人才抢夺战时代
  10. 欧姆龙服务器显示oE,欧姆龙CP1H-E系列PLC实现Modbus TCP\RTU\ASCII通信视频教程