Unity中叉乘意义与代码
在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。 叉乘的结果是个向量,方向在z轴上,在二维空间里,让我们暂时忽略它的方向,将结果看成一个向量,那么这个结果类似于上述的点积 Vector3 D =axb = |a||b|sin(θ) 然而角度 θ和上面点乘的角度有一点点不同,他是有正负的,是指从a到b的角度
1. 定义
向量的叉乘(也称为向量积)是两个三维向量之间的运算,结果是一个新的向量。数学上,给定两个向量 a 和 b,它们的叉乘 a×b 是一个垂直于 a 和 b 所在平面的向量。
2. 几何意义
-
方向:叉乘结果的方向由右手定则确定。将右手四指从 a 转向 b,拇指的方向即为叉乘结果的方向。Unity 中是左手!
-
大小:叉乘结果的大小等于 a 和 b 所形成的平行四边形的面积
3. 物理意义
-
力矩:在物理学中,力矩(Torque)可以通过力向量和力臂向量的叉乘来计算。力矩的方向表示旋转轴的方向,大小表示旋转效应的强度。
-
磁场中的洛伦兹力:在电磁学中,洛伦兹力可以通过电荷速度向量和磁场向量的叉乘来计算。
4. 在Unity中的应用
-
计算法线:在3D图形学中,计算表面法线时,可以使用两个不共线的表面向量的叉乘来得到法线向量。这在光照计算中非常重要。
-
旋转轴:在旋转操作中,可以通过两个向量的叉乘来确定旋转轴。例如,在计算物体的旋转方向时,可以使用当前方向向量和目标方向向量的叉乘来确定旋转轴。
-
碰撞检测:在碰撞检测中,叉乘可以用来计算碰撞法线和碰撞响应的方向。
Unity中可以用一个函数直接计算出两个向量的叉乘结果哦!
这个结果会得到两个向量构成的平面的垂直向量!
意义:
学习代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VectorCrossLraer2 : MonoBehaviour
{
// 这个脚本实现演示向量的叉乘
public GameObject A;
public GameObject B;
Vector3 one = new Vector3(2, 4, 0);
void Update()
{
//计算两个向量构成的平面的法线向量-垂直向量
Vector3 NormalVec= Vector3.Cross(A.transform.position, B.transform.position);
Debug.DrawLine(Vector3.zero, A.transform.position, Color.red);//绘制原点到A坐标的方向向量
Debug.DrawLine(Vector3.zero, B.transform.position, Color.red);//绘制原点到B坐标的方向向量
Vector3 XIANGJIAN = A.transform.position + B.transform.position;//两个向量相加,构成对角线向量
Debug.DrawLine(XIANGJIAN / 2, NormalVec, Color.green);
float changdu= A.transform.position.magnitude;
Debug.Log(changdu);//输出原点到A点连线向量的长度
Debug.Log(one.normalized);//向量单位化
Debug.Log(one.normalized.magnitude);//计算向量单位化以后的长度
}
}