Unity3d 向量 坐标

向量 

 向量包含两个东西: 距离方向.

        aPos = transform.position;
        float lengh = aPos.magnitude;// 长度 ,从Vector3.zero到aPos的距离
        Vector3 dir = aPos.normalized;// 方向

Unity3d 向量 坐标_第1张图片

向量加减

Unity3d 向量 坐标_第2张图片

向量相加

Unity3d 向量 坐标_第3张图片

Unity3d 向量 坐标_第4张图片

 向量相减

Unity3d 向量 坐标_第5张图片

向量减法_在Unity3d演示

Unity3d 向量 坐标_第6张图片

 Unity3d 向量 坐标_第7张图片

Unity3d 向量 坐标_第8张图片

Unity3d 向量 坐标_第9张图片

Unity3d 向量 坐标_第10张图片 
向量加法 _在Unity3d演示

Unity3d 向量 坐标_第11张图片Unity3d 向量 坐标_第12张图片

法线向量_垂直向量算法

 Unity3d 向量 坐标_第13张图片

 向量算法

Unity3d 向量 坐标_第14张图片

 向量叉乘

叉乘 的结果 是向上还是向下 ,在不同位置时结果不同

Unity3d 向量 坐标_第15张图片

  • 判断两个向量之间的左右位置关系

  • //判断两个向量之间的左右位置关系
    Vector3 C = Vector3.Cross(B.position, A.position);
    if (C.y > 0)
    {
        print("A在B的右侧");
    }
    else
    {
        print("A在B的左侧");
    }

    叉乘的顺时针 逆时针

Unity3d 向量 坐标_第16张图片

Unity3d 向量 坐标_第17张图片

        aPos = a.position;
        bPos = b.position;
        var c = Vector3.Cross(bPos, aPos);
        Debug.DrawLine(Vector3.zero, c, Color.black, 0.1f);
        Debug.DrawLine(Vector3.zero, a.position, Color.black, 0.2f);
        Debug.DrawLine(Vector3.zero, b.position, Color.black, 0.2f);

Unity3d 向量 坐标_第18张图片

Unity3d 向量 坐标_第19张图片

 Unity3d 向量 坐标_第20张图片

向量点Unity3d 向量 坐标_第21张图片

 角度与弧度

 Unity3d 向量 坐标_第22张图片

 左手坐标系与右手坐标系

Unity3d 向量 坐标_第23张图片

向量转换四元数

Quaternion.LookRotation(Vector3 n)

两向量之间的夹角角度

    void Update()
    {

        aPos = a.position;
        bPos = b.position;
        var c = Vector3.Cross(bPos,aPos);
        float dot = Vector3.Dot(aPos.normalized, bPos.normalized);
        angle = Mathf.Acos(dot) * Mathf.Rad2Deg;
        if (c.y < 0)
        {
            angle = 360 - angle;
            tmp.text = "A is B to  left";
        }
        else
        {
            tmp.text = "A is B to  right";
        }
        Debug.DrawLine(Vector3.zero, a.position, Color.black, 0.2f);
        Debug.DrawLine(Vector3.zero, b.position, Color.black, 0.2f);
    }

角度累加 按照顺时针相加 ,没有360度最高359.9 

Unity3d 向量 坐标_第24张图片

向量旋转

   已原点为中心点进行旋转

        var a = aT.position;
        //绕y轴旋转90度
        var r = Quaternion.AngleAxis(90, new Vector3(0, 1, 0));
        //点c = 坐标1 + 方向 * 距离
        var c = Vector3.zero + r * (a - Vector3.zero).normalized * 5f;
        Debug.DrawLine(Vector3.zero, aT.position, Color.black, 0.2f);
        Debug.DrawLine(Vector3.zero, c, Color.black, 0.2f);
        C_transform.position = c;

Unity3d 向量 坐标_第25张图片

两向量之间旋转

已知有点A 和点B,代码: Vector3 A,B;

 Unity3d 向量 坐标_第26张图片

求红色箭头方向算法,已知红色箭头垂直于蓝色箭头方向的 

Unity3d 向量 坐标_第27张图片

Unity3d 向量 坐标_第28张图片

    已A点为中心点进行旋转

        a = aT.position;
        b = bT.position;
        //绕y轴旋转90度
        var r = Quaternion.AngleAxis(90, new Vector3(0, 1, 0));
        //点c = 坐标1 + 方向 * 距离
        var c = a + r * (b - a).normalized * 5f;
        Debug.DrawLine(b, aT.position, Color.black, 0.2f);
        Debug.DrawLine(a, c, Color.black, 0.2f);
        C_transform.position = c;

你可能感兴趣的:(unity3d,unity3d)