Unity 点乘及叉乘的几何意义及运用 |
您所在的位置:网站首页 › 两个向量点积的几何意义 › Unity 点乘及叉乘的几何意义及运用 |
1:点乘: 定义:a·b=|a|·|b|cos 【注:粗体小写字母表示向量,表示向量a,b的夹角,取值范围为[0,180]】 注:看到公式,我们即可知道点乘过后得到的是一个标量,而不是一个向量。 而且可以通过这个去计算两个点之间的夹角及方向; 图片详解: Unity项目中的应用 1:通过点乘,我们可以计算出两个点之前的前后所属位置,当a·b>0;角度值在0到90度之间,可想而知及b点在a点的前方,反之a·b 0) { Debug.Log("b点在a点的前方-------->"); } else { Debug.Log("b点在a点的后方----------->"); } float radians2 = Mathf.Acos(dotResult2); float angle2 = radians2 * Mathf.Rad2Deg; Debug.Log("该两个点的角度值为---------->" + angle2); } 2:叉乘:定义:c = a x b,其中a b c均为向量 几何意义是:得到一个与这两个向量都垂直的向量 性质1:c⊥a,c⊥b,即向量c与向量a,b所在平面垂直 性质2:模长|c| = |a||b| sin 图片详解: Unity项目中的应用: 1.根据叉乘得到a,b向量的相对位置,和顺时针或逆时针方位。 简单的说: 点乘判断角度,叉乘判断方向。 形象的说: 当一个敌人在你身后的时候,叉乘可以判断你是往左转还是往右转更好的转向敌人,点乘得到你当前的面朝向的方向和你到敌人的方向的所成的角度大小。 /// /// 叉乘 /// private void TestCross(Transform a, Transform b) { Vector3 vecAobj = a.transform.forward; Vector3 vecBObj = b.transform.position - a.transform.position; Vector3 crossC = Vector3.Cross(vecAobj.normalized, vecBObj.normalized); float radians = Mathf.Asin(Vector3.Distance(Vector3.zero, crossC)); float angle = radians * Mathf.Rad2Deg; Debug.Log("该两个点的角度值为---------->" + angle); if (crossC.y > 0) { Debug.Log("b在A的顺时针方向");// 由此可以用来判断我A点是向左转还是右转可以更快的找到B点。此处的顺时针和逆时针是指更快的速度找到对应点。 琢磨下 应该就清楚这里指什么意思了 } else { Debug.Log("b在A的逆时针方向"); } } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |