3.Mathf数学计算类三角函数

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

×

喜欢就点赞,疼爱就打赏