3.3D数学-三角函数
3.1 知识点
主要学习内容
角度和弧度
角度和弧度的转换关系
Unity中的弧度、角度相互转化
Rad2Deg常量 弧度转角度的常量
// 弧度到度换算常量(只读)。
float rad = 1;
float anger = rad * Mathf.Rad2Deg;
print(anger);//57.29578f;
Deg2Rad常量 角度转弧度的常量
// 度到弧度换算常量(只读)。
anger = 1;
rad = anger * Mathf.Deg2Rad;
print(rad);//0.01745329
三角函数
三角函数曲线
常用特殊度数正弦余弦值
Unity中的三角函数
注意:Mathf中的三角函数相关函数,传入的参数需要时弧度值
Sin静态方法 计算正弦函数
// 返回角度 f 的正弦。
print(Mathf.Sin(30 * Mathf.Deg2Rad));//0.5
Cos静态方法 计算余弦函数
// 返回角度 f 的余弦。
print(Mathf.Cos(60 * Mathf.Deg2Rad));//0.5
反三角函数
Unity中的反三角函数
注意:反三角函数得到的结果是 正弦或者余弦值对应的弧度
Asin静态方法 反正弦函数
// 返回 f 的反正弦 - 其正弦为 f 的角度(以弧度为单位)。
rad = Mathf.Asin(0.5f);
print(rad * Mathf.Rad2Deg);//30
Acos静态方法 反余弦函数
// 返回 f 的反余弦 - 其余弦为 f 的角度(以弧度为单位)。
rad = Mathf.Acos(0.5f);
print(rad * Mathf.Rad2Deg);//60
总结
3.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson03_3D数学_三角函数 : MonoBehaviour
{
void Start()
{
#region 知识点一 Unity中的弧度、角度相互转化
//Rad2Deg常量 弧度转角度的常量
//弧度到度换算常量(只读)。
float rad = 1;
float anger = rad * Mathf.Rad2Deg;
print(anger);//57.29578f;
//Deg2Rad常量 角度转弧度的常量
//度到弧度换算常量(只读)。
anger = 1;
rad = anger * Mathf.Deg2Rad;
print(rad);//0.01745329
#endregion
#region 知识点二 Unity中的三角函数
//注意:Mathf中的三角函数相关函数,传入的参数需要时弧度值
//Sin静态方法 计算正弦函数
//返回角度 f 的正弦。
print(Mathf.Sin(30 * Mathf.Deg2Rad));//0.5
//Cos静态方法 计算余弦函数
//返回角度 f 的余弦。
print(Mathf.Cos(60 * Mathf.Deg2Rad));//0.5
#endregion
#region 知识点三 Unity中的反三角函数
//注意:反三角函数得到的结果是 正弦或者余弦值对应的弧度
//Asin静态方法 反正弦函数
//返回 f 的反正弦 - 其正弦为 f 的角度(以弧度为单位)。
rad = Mathf.Asin(0.5f);
print(rad * Mathf.Rad2Deg);//30
//Acos静态方法 反余弦函数
//返回 f 的反余弦 - 其余弦为 f 的角度(以弧度为单位)。
rad = Mathf.Acos(0.5f);
print(rad * Mathf.Rad2Deg);//60
#endregion
}
}
3.3 练习题
实现物体按曲线移动(正弦或余弦曲线)
创建移动相关参数
// 面朝向移动速度
public float moveSpeed = 5;
// 左右曲线移动变化的速度
public float changeSpeed = 2;
// 左右曲线移动距离控制
public float changeSize = 10f;
// 时间
private float time = 0;
Update函数中写移动逻辑函数
void Update()
{
// x轴移动
this.transform.Translate(Vector3.right * moveSpeed * Time.deltaTime); // moveSpeed控制x轴移动速度快慢
// y轴移动
time += Time.deltaTime * changeSpeed; // changeSpeed控制每一帧累加多少时间,时间最终传进去Sin函数中
this.transform.Translate(Vector3.up * changeSize * Time.deltaTime * Mathf.Sin(time)); // changeSize控制三角函数里的最值
}
注意
moveSpeed
控制物体在 x 轴上的移动速度。changeSpeed
控制时间的累加速度,影响正弦函数的周期。changeSize
控制正弦函数的振幅,影响物体在 y 轴上的移动幅度。time
变量用于在正弦函数中控制时间的流逝,实现曲线运动效果。
3.4 练习题代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//这个脚本将要挂载到要移动的立方体上 实现立方体按sinx函数移动
public class Lesson03_练习题 : MonoBehaviour
{
#region Lesson03 练习题一
//实现一个物体按曲线移动(正弦或者余弦曲线)
//向右移动速度
public float moveSpeed = 1;
//上下曲线移动变化的速度
public float changeSpeed = 2;
//上下曲线移动距离控制
public float changeSize = 10f;
//时间
private float time = 0;
void Update()
{
//x轴移动
this.transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);//moveSpeed控制x轴移动速度快慢
//y轴移动
time += Time.deltaTime * changeSpeed;//changeSpeed控制每一帧累加多少时间 时间最终传进去Sin函数中
this.transform.Translate(Vector3.up * changeSize * Time.deltaTime * Mathf.Sin(time));//changeSize控制三角函数里的最值
}
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com