zoukankan      html  css  js  c++  java
  • Unity的学习笔记(向量点乘和叉乘)

    public class AngleTest : MonoBehaviour {
    
        public GameObject cube;              //主要的物体
        public GameObject radCube;           //判断此物体与主要物体位置
    
        Vector3 radCubeToCube;               //红色方块到这个方块的向量
    
        Vector3 crossOfcube;                 //存放叉乘的结果
    
        float angleCross;                    //存放叉乘角度
        float angleDot;                      //存放点乘角度
    
        
    
        // Use this for initialization
        void Start () {
            
        }
        
        // Update is called once per frame
        void Update () {
            radCubeToCube = radCube.transform.position - cube.transform.position;    
    
            crossOfcube = Vector3.Cross(cube.transform.forward.normalized, radCubeToCube.normalized); //一定要转换成单位向量
    
            angleCross = Mathf.Asin(Vector3.Distance(Vector3.zero,crossOfcube)) * Mathf.Rad2Deg;   //网上查的,用来算叉乘角度
            Debug.Log("点乘夹角" + angleCross);
            Debug.Log("左右判断" + crossOfcube.y);
            Debug.Log("上下判断" + crossOfcube.x);
    
            angleDot = Mathf.Acos(Vector3.Dot(radCubeToCube.normalized, cube.transform.forward.normalized)) * Mathf.Rad2Deg;
            //这个分开看,Vector3.Dot()是为了计算两个向量得到的cos值,Mathf.Acos是反三角函数,转换为弧度,Mathf.Rad2De是把弧度换成角度
    
            Debug.Log("V3.Dot=" + angleDot);
        }
    }

    我个人觉得angleCross这个数据应该用不上, 我测试了一下,角度都是90度以内,也没法得到位置信息,所以我没有研究得到这个数据的代码。

    crossOfcube.y 得到这个这个值就很有用,不管数据是多少,但是有正负,正方向就是方块的左边,负方向就是方块的右边。

    crossOfcube.x 这个也有用,也是通过正负判断方位,如果是正,则在下方,负数则在上方。

    angleDot 得到的这个角度也挺有用的,能够判断方位,可以结合crossOfcube得到的判断在自己的左右多少度方位。

  • 相关阅读:
    《认知突围》摘抄
    《java多线程编程核心技术》----ThreadLocal
    java有必要记录的东西
    spring源码几个servlet功能的介绍
    基于openapi3.0的yaml文件生成java代码的一次实践
    Android攻城狮 调试
    Android攻城狮 http协议
    Android攻城狮 Android中更新UI的几种方式
    Android攻城狮 Handler与子线程
    Android攻城狮Handler简介
  • 原文地址:https://www.cnblogs.com/takanashi/p/10810137.html
Copyright © 2011-2022 走看看