点乘与叉乘
最编程
2024-04-29 21:07:13
...
public static Vector3 Cross(Vector3 lhs, Vector3 rhs);
叉乘的物理意义:返回值的y值如果大于0,在右边,如果小于0,在左边。
a向量与b向量的向量积的方向与这两个向量所在平面垂直
public static float Dot(Vector3 lhs, Vector3 rhs);
点乘的物理意义:返回值如果大于0,两个向量的夹角小于90度,大于0则大于90度。
点乘的特点
在向量u,向量v非零的前提下,点积如果为负,则u,v形成的角大于90度;
如果为零,那么u,v垂直;
如果为正,那么u,v形成的角小于90度。
1.判断目标在自己的前后方位可以使用下面的方法:
Vector3.Dot(transform.forward, target.position-transform.position)
返回值为正时,目标在自己的前方,反之在自己的后方
2.判断目标在机子的左右方位可以使用下面的方法:
Vector3.Cross(transform.forward, target.position-transform.position).y
返回值为正时,目标在自己的右方,反之在自己的左方
void Update()
{
V1 = p1.position - p0.position;
V2 = p2.position - p0.position;
Debug.DrawLine(p1.position, p0.position, Color.magenta);
Debug.DrawLine(p2.position, p0.position, Color.magenta);
float f = Vector3.Dot(V1.normalized, V2.normalized);
Debug.LogFormat("{0} {1}", f, Mathf.Acos(f) * Mathf.Rad2Deg);
}
点乘也可以求出角度
public bool RectAttackJudge(Transform attacker, Transform attacked, float forwardDistance, float rightDistance)
{
Vector3 deltaA = attacked.position - attacker.position;
float forwardDotA = Vector3.Dot(attacker.forward, deltaA);
if (forwardDotA > 0 && forwardDotA <= forwardDistance)
{
if (Mathf.Abs(Vector3.Dot(attacker.right, deltaA)) < rightDistance)
{
return true;
}
}
return false;
}
标准向量与向量点积,可以获取新向量的长度
bool isInRight = false;
Vector3 p = Vector3.Cross(transform.forward, dir);
if (p.y > 0)
{
isInRight = true;
}
上一篇: WebGL 前端高级数学(II)--向量
下一篇: Unity 基础 - 矢量
推荐阅读
-
矢量叉乘算法 矢量-金块
-
点乘与叉乘
-
适用于 STM32H7 的 DSP 教程 - 第 19 章 DSP 复数运算 - 共轭、点乘和模乘
-
适用于 STM32F407 的 DSP 教程 - 第 19 章 DSP 复数运算 - 共轭、点乘和模乘
-
适用于 STM32H7 的 DSP 教程 - 第 19 章 DSP 复数运算 - 共轭、点乘和模乘
-
知道一个物理量 y 与另外两个物理量 t1 和 t2 的关系式,确定参数并找出其最小二乘问题的数学模型 - 等效问题的最小二乘模型
-
java 模乘与模乘运算代码相同
-
和与乘 积与乘法 符号算术 - 数学
-
轻松掌握数学基础:K. 点与三角形的秘密(用叉积法计算面积)
-
Eigen新手指南:基础操作 - 矩阵加减与数乘实例演示