Unity的基础数学

3D 数学基础

前言

本身对这方面其实不是很会,没办法,那天写了个功能用到这块了,临时抱佛脚学一学/(ㄒoㄒ)/~~,记录下来别回来又忘了

学习视频B站上的达内教程

https://www.bilibili.com/video/BV1Jt411974P?p=15&spm_id_from=pageDriver

向量

向量是一个数字列表(比如:(1,2,3)或者(1,2)),
他表示的是各个维度上的有向(有方向)位移。
向量是由大小(模长)和方向组成的
大小和模长是一个意思
方向空间中向量的指向
描述物体的位置和方向
在这里插入图片描述

如何获取大小和方向

通过数学公式

大小

在这里插入图片描述

private void Update()
{
	Demo01();
}
//模长
private void Demo01()
{
	Vector3 pos = this.transform.position;
	//求模长
	//1.套公式
		//Mathf.Pow平方
		//Mathf.Sqrt开平方
	float m01 = Mathf.Sqrt(Mathf.Pow(pos.x,2) + Mathf.Pow(pos.y,2) + Mathf.Pow(pos.z,2));
	//2.调API 获取向量模长
	float m02 = pos.magnitude;
	//3.两点间距
	float m03 = Vector3.Distance(Vector3.zero,pos)
	//编译器下画线段 从世界原点画到当前物体
	Debug.DrawLine(Vector3.zero,pos);
}
方向

在这里插入图片描述

private void Update()
{
	Demo02();
}
//方向
private void Demo02()
{
	Vector3 pos = this.transform.position;
	//求模长
	//1.套公式
	Vector3 n01 = pos/pos.magnitude;
	//2.调API 获取向量方向 计算单位向量(长度为1)
	Vector3 n02 = pos.normalized;
	Debug.DrawLine(Vector3.zero,pos);
	Debug.DrawLine(Vector3.zero,n02,Color.red);
}
向量计算
public Transform t1,t2;
private void Update()
{
	Demo03();
}
//向量计算
private void Demo03()
{
	//向量相减 减完后还是向量 a - b 箭头朝a  b - a 箭头朝b  (减号前面的)
	Vector3 relativeDirection = t1.position - t2.position
	//方向:只向被减向量 (举例子:比如敌人朝玩家开枪,从敌人的枪口射出子弹,用玩家的位置减敌人的位置,这就是箭头指向玩家)
	//大小:两点间距 (举例子:比如子弹朝着某个方向飞,如果不拿单位向量,距离远会直接飞过去,距离近会慢慢飞过去,点normalized把他归一,因为如果移动的话给的向量包含方向和大小,现在只要方向不要大小)
	//注意:实际位置平移到原点
	Debug.DrawLine(Vector3.zero,relativeDirection);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

三角函数

在这里插入图片描述

在这里插入图片描述

private void Update()
{
	Demo01();
}

private void Demo01()
{
	//角度转弧度
	float jiaoDu = 60;
	//1.套公式
	float huDu = jiaoDu * Mathf.PI / 180;
	//2.API
	float huDu2 = jiaoDu * Mathf.Deg2Rad;
	//弧度转角度
	float huDu3 = 3;
	//1.套公式
	float jiaoDu = huDu3 * 180 / Mathf.PI;
	//2.API
	float jiaoDu = huDu3 * Mathf.Rad2Deg;
}

什么时候用三角函数什么时候用反三角函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

private void Update()
{
	Demo01();
}

private void Demo01()
{
	//练习:计算物体右前方30°,10m远坐标
	float x = Mathf.Sin(30 * Mathf.Deg2Rad) * 10;
	float z = Mathf.Cos(30 * Mathf.Deg2Rad) * 10;
	Vector3 worldPoint = transform.TransformPoint(x,0,z);
	Debug.DrawLine(this.transform.position,worldPoint);
}

向量的运算都有哪些

向量 和 向量 + -
向量 和 数字 * /
向量 和 向量 点乘Dot叉乘Cross

点乘

在这里插入图片描述
在这里插入图片描述

private void Update()
{
	Demo01();
}

private void Demo01()
{
	Debug.DrawLine(Vector3.zero,t1.position);
	Debug.DrawLine(Vector3.zero,t2.position);
	//余弦值
	float dot = Vector3.Dot(t1.position.normalized,t2.position.normalized);
	//反余弦 转角度
	float angle = Mathf.Acos(dot) * Mathf.Rad2Deg;
	//这样算出来的分不清180°以上角度 永远算的是最小的角度,所以这个度数一定在180以内
}

在这里插入图片描述
在这里插入图片描述

叉乘

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

private void Update()
{
	Demo01();
}

private void Demo01()
{
	Vector3 cross = Vector3.Cross(t1.position,t2.position);
	//判断他的y值是大于0还是小于0,如果是小于0说明在三四象限,超过了180°,又因为点乘计算的是最小的夹角,需要用360减去这个最小的夹角,才能求出来实际需要的度数
	if(cross.y < 0)
	{
		angle = 360 - angle;
	}
	Debug.DrawLine(Vector3.zero,cross);
}

在这里插入图片描述
在这里插入图片描述

欧拉角

在这里插入图片描述

优点

在这里插入图片描述
这里说表达方位的有三种 一个是欧拉角 3个数 一个是四元数 4个数 还有一个是矩阵 16个数

缺点

在这里插入图片描述
在这里插入图片描述

private void Update()
{
	Demo01();
}

private void Demo01()
{
	//这个向量有大小(当前位置到世界原点)和方向(世界原点只想当前位置)
	Vector3 pos = this.transform.position;
	//这个欧拉角没有大小和方向 只包含x y z
	Vector3 euler = this.transform.eulerAngles;
}

万向节死锁
在这里插入图片描述

四元数

在这里插入图片描述

坐标系统

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值