5.3D数学-Vector3向量-向量模长和单位向量
5.1 知识点
主要学习内容
向量基础
Unity中的向量
- 三维向量 - Vector3
- Vector3有两种几何意义
- 位置:Vector3代表一个点
- 示例:
print(this.transform.position);
代表对象当前位置
- 示例:
- 方向:Vector3代表一个方向
- 示例:
print(this.transform.forward);
代表对象向前的单位向量 - 示例:
print(this.transform.up);
代表对象向上的单位向量
- 示例:
- 位置:Vector3代表一个点
- Vector2和Vector3基本同理
- 示例:
Vector3 v = new Vector3(1, 2, 3);
- 示例:
Vector2 v2 = new Vector2(1, 2);
- 示例:
- Vector3有两种几何意义
两点决定一向量
Unity中的两点决定一向量
- Vector3变量A和B此时的几何意义是两个点
- 示例:
Vector3 A = new Vector3(1, 2, 3); Vector3 B = new Vector3(5, 1, 5);
- 示例:
- 用终点减去起点求向量
- Vector3变量AB和BA此时的几何意义是两个向量
- 示例:
Vector3 AB = B - A; Vector3 BA = A - B;
零向量和负向量
Unity中的零向量和负向量
- 零向量
- 示例:
print(Vector3.zero);
- 示例:
- 原向量
- 示例:
print(Vector3.forward);
- 示例:
- 负向量
- 示例:
print(-Vector3.forward);
- 示例:
向量的模长
Unity中的向量的模长
magnitude变量 获取向量模长
- 返回该向量的长度。(只读)
- Vector3中提供了获取向量模长的成员属性
- 示例:
print(AB.magnitude); // AB向量的模长 Vector3 C = new Vector3(5, 6, 7); print(C.magnitude); // 从原点O出发终点为C的向量OC的模长 // Distance方法 是通过点的距离获取的长度 // 返回 a 与 b 之间的距离。 print(Vector3.Distance(A, B)); // 数值上等于AB.magnitude
单位向量
Unity中的单位向量
normalized变量 获取该向量方向的单位向量 返回同方向长度为1的向量
- 返回 magnitude 为 1 时的该向量。(只读)
- Vector3中提供了获取单位向量的成员属性
- 示例:
print(AB.normalized); print(AB / AB.magnitude); // 数值上等于AB.normalized
总结
- Vector3这边变量 可以表示一个点 也可以表示一个向量 具体表示什么 是根据我们的具体需求和逻辑决定
- 如何在Unity里面得到向量 终点减起点 就可以得到向量 点C也可以代表向量 代表的就是 OC向量 O是坐标系原点
- 得到了向量 就可以利用 Vector3中提供的 成员属性 得到模长和单位向量
- 模长相当于可以得到 两点之间的距离 单位向量 主要是用来进行移动计算的 它不会影响我们想要的移动效果
5.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson05_3D数学_Vector3向量_向量模长和单位向量 : MonoBehaviour
{
void Start()
{
#region 知识点一 Unity中的向量
//三维向量 - Vector3
//Vector3有两种几何意义
//位置 —— Vector3代表一个点
print(this.transform.position);//代表对象当前位置
//方向 —— Vector3代表一个方向
print(this.transform.forward);//代表对象向前的单位向量
print(this.transform.up);//代表对象向上的单位向量
//Vector2和Vector3基本同理
Vector3 v = new Vector3(1, 2, 3);
Vector2 v2 = new Vector2(1, 2);
#endregion
#region 知识点二 Unity中的两点决定一向量
//Vector3变量A和B此时的几何意义是两个点
Vector3 A = new Vector3(1, 2, 3);
Vector3 B = new Vector3(5, 1, 5);
//用终点减去起点求向量
//Vector3变量AB和BA此时的几何意义是两个向量
Vector3 AB = B - A;
Vector3 BA = A - B;
//以后想知道两个位置的方向 可以用两个对象的position相减
#endregion
#region 知识点三 Unity中的零向量和负向量
//零向量
print(Vector3.zero);
//原向量
print(Vector3.forward);
//负向量
print(-Vector3.forward);
#endregion
#region 知识点四 Unity中的向量的模长
//magnitude变量 获取向量模长
//返回该向量的长度。(只读)
//Vector3中提供了获取向量模长的成员属性
print(AB.magnitude);//AB向量的模长
Vector3 C = new Vector3(5, 6, 7);
print(C.magnitude);//从原点O出发终点为C的向量OC的模长
//Distance方法 是通过点的距离获取的长度
//返回 a 与 b 之间的距离。
print(Vector3.Distance(A, B));//数值上等于AB.magnitude
#endregion
#region 知识点五 Unity中的单位向量
//normalized变量 获取该向量方向的单位向量 就是返回一个同方向长度为1的向量
//返回 magnitude 为 1 时的该向量。(只读)
//Vector3中提供了获取单位向量的成员属性
print(AB.normalized);
print(AB / AB.magnitude);//数值上等于AB.normalized
#endregion
}
//总结
//1.Vector3这边变量 可以表示一个点 也可以表示一个向量 具体表示什么 是根据我们的具体需求和逻辑决定
//2.如何在Unity里面得到向量 终点减起点 就可以得到向量 点C也可以代表向量 代表的就是 OC向量 O是坐标系原点
//3.得到了向量 就可以利用 Vector3中提供的 成员属性 得到模长和单位向量
//4.模长相当于可以得到 两点之间的距离 单位向量 主要是用来进行移动计算的 它不会影响我们想要的移动效果
}
5.3 练习题
Unity中判断两点之间距离有几种方式?
- Distance方法传入AB两个对象的坐标
print(Vector3.Distance(A.position, B.position));
- 终点减起点算出BA向量求模长
print((A.position - B.position).magnitude);
- 终点减起点算出AB向量求模长
print((B.position - A.position).magnitude);
计算向量(3,4,5)的模长(手写)
模长计算公式为:
模长 = √(x^2 + y^2 + z^2)
对于向量 (3, 4, 5):
模长 = √(3^2 + 4^2 + 5^2)
= √(9 + 16 + 25)
= √(50)
≈ 7.07
计算向量 (3, 4) 的单位向量(手写)
单位向量是指模长为1的向量,计算步骤如下:
- 计算向量的模长:
模长 = √(x^2 + y^2)
= √(3^2 + (-4)^2)
= √(9 + 16)
= √25
= 5
- 计算单位向量:
单位向量 = (3/5, -4/5)
5.4 练习题代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson05_练习题 : MonoBehaviour
{
public Transform A;
public Transform B;
void Start()
{
#region 练习题一
//Unity中判断两点之间距离有几种方式?
//有三种方式
//Distance方法传入AB两个对象的坐标
print(Vector3.Distance(A.position, B.position));
//终点减起点算出BA向量求模长
print((A.position - B.position).magnitude);
//终点减起点算出AB向量求模长
print((B.position - A.position).magnitude);
#endregion
#region 练习题二
//计算向量(3,4,5)的模长(手写)
//根号50
#endregion
#region 练习题三
//计算向量(3, -4) 的单位向量(手写)
//5
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com