返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 3220|回复: 0

[原创] 【原创】三维数学、向量的模长、向量的方向讲解

[复制链接]
发表于 2021-5-31 16:00:32 | 显示全部楼层 |阅读模式
本帖最后由 da11 于 2021-6-14 11:54 编辑

//MathVectorDeom.cs
//实验可随便挂在任意物体上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MathVectorDeom : MonoBehaviour
{
    /* 什么是向量




     * · 一个数字列表,表示各个维度上的有向位移。
     * · 一个有大小有方向的物理量。
     *      - 大小就是向量的模长(magnitude)。
     *      - 方向描述了空间中向量的指向(direction)。
     * · 可以表示物体的位置和方向。
     *
     * 向量的大小(模长)计算
     * · 向量各分量平分和的平方根。
     * · 公式:(x²+y²+z²)后开2次平方!
     *
     * · API调用方法计算: float Num2 = V3.magnitude;
     *   -- 模的平方  float Num = vector.sqrMagnitude;
     *   -- 因为平方根的计算耗时长,所以效率高于vector.magnitude。
     *
     * 向量的方向
     * · 获取向量方向也称 “标准化向量”,或 “归一化向量”;
     *   既获取该向量的单位向量。
     * · 单位向量:大小为1的向量。
     *
     * · 公式:V / |V|   (向量除以向量的模长!)
     * · 几何意义:将该向量拉长或者缩短,使模长等于1.
     *
     * · API调用方法计算:Vector3 vector2 = vector1.Normalized();
     *   -- vector1.Normalized(); 将vector1自身设置为单位向量
     *   -- vector2 为vector1的单位向量
     *
     * 注意:标准化向量、归一化向量、单位向量,指的都是同一个东西:将该向量拉长或者缩短,使模长等于1.
     * 向量相减
     * · 等于各分量相加减
     * · 公式:[x1,y1,z1] - [x2,y2,z2] = [x1-x2,y1-y2,z1-z2]
     * · 几何意义:向量a与向量b相减,结果理解为以b的终点为始点,
     *   以a的终点为终点的向量。方向由b指向a。
     * · 应用案例:计算两点之间的距离和相对方向。
     *
     * 向量相加
     * · 等于各分分量相加和
     * · 公式:[x1,y1,z1] + [x2,y2,z2] = [x1+x2,y1+y2,z1+z2]
     * · 几何意义:向量a与向量b相加,平移使b的始点与a的终点重合,
     *   结果为以a的始点为始点,以b的终点为终点的向量。
     *   应用案例:物体移动
     *   
     * 向量与标量的乘除
     * · 乘法: 该向量的各分量与标量相乘 k[x,y,z] = [xk,yk,zk]
     * · 除法: 该向量的各分量与标量相除 [x,y,z]/k = [x/k,y/l,z/k]
     * · 几何意义: 缩放向量长度。(方向不变)
     *
    */

    private void Update()
    {
        MathDemo1();
        MathDemo2();

    }

    //模长演示方法
    private void MathDemo1()
    {
        Vector3 V3 = this.transform.position;

        //求平方的API方法:Mathf.Pow(源值,平方数);
        //开2次平方的API方法:Mathf.Sqrt(源值);
       //求模长--方案1,直接套公式:(x²+y²+z²)后开2次平方!--公式可以灵活运用
        float Num1 = Mathf.Sqrt(Mathf.Pow(V3.x, 2) + Mathf.Pow(V3.y, 2) + Mathf.Pow(V3.z, 2));

        //求模长--方案2,调用Vector3实例的magnitude方法即可。--一般求模长使用方案2
        float Num2 = V3.magnitude;

        //求模长--方案3,调用Vector3类的Distance(两点间距)方法,形参一个是0点,一个是测量点vector3的位置。--知道即可,一般求模长不用这个。
        float Num3 = Vector3.Distance(Vector3.zero,V3);

        //Debug.DrawLine是调试的时候,根据两点距离,画出两点间的一条线,在游戏发布后不会显示。
        //以下举例:显示向量的直线距离
        Debug.DrawLine(Vector3.zero, V3);

        //Debug.LogFormat允许使用占位符在编辑器中调试显示
        Debug.LogFormat("{0}--{1}--{2}", Num1, Num2, Num3);
    }

    //方向演示方法
    private void MathDemo2()
    {
        Vector3 V3 = this.transform.position;

        //求向量的方向--方案1:直接套公式:V / | V |   (向量除以向量的模长!)
        Vector3 FX1 =  V3 / V3.magnitude;

        //求向量的方向:(归一化、标准化)--方案2:调用Vector3实例的normalized方法即可。--一般求向量的方向使用方案2!
        //结果FX2就是单位向量
        Vector3 FX2 = V3.normalized;

        //Debug.DrawLine是调试的时候,根据两点距离,画出两点间的一条线,在游戏发布后不会显示。最后形参可以加颜色区分
        //以下举例:显示从零点到此单位向量的直线
        //调试得知:单位向量永远都是只有1米,和单位大小的直线(Debug.DrawLine(Vector3.zero, V3))空间方向重合
        Debug.DrawLine(Vector3.zero, FX2,Color.red);
    }
}
    //向量计算方法--重点课程
    private void XLJSFF()
    {
        Vector3 relativeDirection = XLVar1.position - XLVar2.position;
        //相减后方向:指向被减向量(前面的(XLVar1.position))
        //相减后大小:两点间距
        //实际向量的位置要平移到世界坐标的原点!




        //按键按下,XLVar3沿着relativeDirection的方向移动
        if (Input.GetKey(KeyCode.W))
        {
            //向量的变量只给方向的值,不给大小,通俗说就是不受距离影响,每次移动都是1米
            //求向量的方向:(归一化、标准化),调用Vector3实例(XLVar3)的normalized方法即可。
            //XLVar3.Translate(relativeDirection.normalized);

            //Translate的原理公式,向量相加,用原来的实例position加上向量相减的方向
            XLVar3.position = XLVar3.position + relativeDirection.normalized;



//向量相加减图








        }

        Debug.DrawLine(Vector3.zero, relativeDirection);
    }




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
 楼主| 发表于 2021-5-31 16:03:05 | 显示全部楼层
演示图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
回复 支持 反对

使用道具 举报

游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表