美文网首页
点积,叉积

点积,叉积

作者: 晓龙酱 | 来源:发表于2017-09-15 19:39 被阅读13次

点积公式为:

A·B = |A| * |B| * cos<A, B>  
A·B = Ax·Bx + Ay·By + Az·Bz

再结合余弦曲线可以知道:

当夹角在[0,90], [270, 360]区间内,cosx > 0
当夹角在[90, 270]区间内,cosx < 0

所以:

  • 当你跟目标点方向的叉积 > 0 时,说明你面向它;
  • 当你跟目标点方向的叉积 < 0 时,说明你背对它。
Vector3 dirA = transform.forward;
Vector3 dirB = target.position - transform.position;
float dp = Vector3.Dot(dirA, dirB);

if(dp > 0)
  Debug.Log("target is in the front");
else if(dp < 0)
  Debug.Log(target is in the back");

叉积公式为:

// 值为向量,且此向量垂直于dirA,dirB构成的平面
A * B = A * B * sin<A, B>
A * B = (Ay·Bz-Az·By, Az·Bx-AxBz, AxBy-AyBx) 

Unity使用左手坐标系,所以:

  • 当dirC.y > 0 时,目标点在右侧
  • 当dirC.y > 0 时,目标点在左侧
// a的当前朝向
Vector3 vec3Forward = a.transform.TransformDirection(Vector3.forward);

// 目标方向
Vector3 vec3Target = b.transform.transform.position - a.transform.position;

// 计算叉乖
Vector3 vec3Cross = Vector3.Cross( vec3Forward, vec3Target );

// 计算转角
float dAngle = Vector3.Angle( vec3Forward, vec3Target );        // Angle方法始终返回最小角

// 根据左手法则,y向上,说明目标在右边,y向下,说明目标在左边
if( vec3Cross.y > 0 )
{
        // 向右转
        a.transform.Rotate( cube.transform.up, dAngle )
}
else
{
        // 向左转
        a.transform.Rotate( cube.transform.up, -dAngle )
}

相关文章

  • 点积,叉积

    点积公式为: 再结合余弦曲线可以知道: 当夹角在[0,90], [270, 360]区间内,cosx > 0当夹角...

  • 【MATLAB】向量运算

    数量积(点乘) 向量积(叉乘) 夹角 模

  • 向量点积和叉积

    参考:https://blog.csdn.net/fox64194167/article/details/8147...

  • numpy计算点积叉积和混合积

    1.源码实现 2.运行及其结果

  • 用点积、叉积搞点事情

    用点积、叉积实现剖面图效果什么是剖面图,一把无形的刀,将模型一分为二,将其中一半隐藏掉,单看一半用来观察内部结构。...

  • 线性代数的本质(笔记3)(完)

    1. 叉积与点积 点乘,也叫数量积。结果是一个向量在另一个向量方向上投影的长度,是一个标量。 叉乘,也叫向量积。结...

  • shader 所需的数学公示_向量/矢量_01

    向量/矢量v(x,y,z) 模 点积 v1 在v2上的投影长度 (>0 方向相同 反之) 叉积 向量叉积来计算垂直...

  • 叉积

    1两个向量a,b的叉积等于a和b组成的三角形的有向面积的两倍 2b在a左边时,叉积大于0;在右边时小于0(absi...

  • 叉积

    你不知道真正的叉积是什么 于是你从二位像三位推导。 即三维的叉积应该是三个三维向量相乘得出一个平行六面体体积。 但...

  • 向量外积的高中数学运用

    向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个...

网友评论

      本文标题:点积,叉积

      本文链接:https://www.haomeiwen.com/subject/qndesxtx.html