美文网首页
unity-向量的点乘和叉乘

unity-向量的点乘和叉乘

作者: 姜治宇 | 来源:发表于2022-12-28 10:42 被阅读0次

    点乘

    点乘的结果,是个数字。
    (x1,y1,z1)·(x2,y2,z2)=x1x2+y1y2+z1z2
    其几何意义为:
    a·b=|a||b|·cosθ
    移项得到:
    cosθ=a/|a|·b/|b|
    然后反余弦,就可以求两个向量之间的夹角。

    using UnityEngine;
    using System.Collections;
    
    public class VectorDemo1 : MonoBehaviour {
         
        public Transform tr1,tr2;
        public float angle;
        // Use this for initialization
        void Start () {
        
        }
        
        // Update is called once per frame
        void Update () {
            getAngle ();
        }
        private void getAngle(){
            Debug.DrawLine (Vector3.zero,tr1.position);
            Debug.DrawLine (Vector3.zero,tr2.position);
            //点乘
            float dotRes = Vector3.Dot (tr1.position.normalized,tr2.position.normalized);
            //弧度->角度
            angle = Mathf.Acos (dotRes) * Mathf.Rad2Deg;
    
        }
    }
    
    1.png
    2.png

    叉乘

    叉乘又称叉积或外积。
    叉乘的结果,还是个向量,其方向垂直于两个向量组成的面,可以用左手法则判断。
    叉乘的现实意义为:假如有a和b两个向量,通过叉乘,可以判断b在a的左边还是右边。

    using UnityEngine;
    using System.Collections;
    
    public class VectorDemo1 : MonoBehaviour {
         
        public Transform tr1,tr2;
        public float y;
        // Use this for initialization
        void Start () {
        
        }
        
        // Update is called once per frame
        void Update () {
            getCross ();
        }
        private void getCross(){
            Debug.DrawLine (Vector3.zero,tr1.position);
            Debug.DrawLine (Vector3.zero,tr2.position);
            //叉乘
            Vector3 crossRes = Vector3.Cross (tr1.position,tr2.position);
            y = crossRes.y;//判断y的±
            Debug.DrawLine (Vector3.zero,crossRes,Color.red);
    
    
        }
    }
    
    
    
    7.gif

    注意观察y的值。

    相关文章

      网友评论

          本文标题:unity-向量的点乘和叉乘

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