Unity中计算两个三维坐标点的各种方法

1、 根据勾股定理计算两点的距离

  /// <summary>
  /// 根据勾股定理计算两点的距离
  /// </summary>
  /// <param name="point1"></param>
  /// <param name="point2"></param>
  /// <returns></returns>
  private float CalculateTwoPointDistance(Vector3 point1, Vector3 point2)
  {
      //根据勾股定理(a²+b²=c²)求出支撑杆长度,开c的平方根得到弦的长度
      float c = Vector3.Distance(point2, point1);
      float a = Mathf.Abs(point2.y - point1.y);
      return Mathf.Sqrt(Mathf.Pow(c, 2) - Mathf.Pow(a, 2));
  }

2、计算两条向量在某平面上的投影之间的角度。有正负值的角度。根据左手定律确定顺、逆时针旋转方向

    /// <summary>
    /// 计算两条向量在某平面上的投影之间的角度。有正负值的角度。根据左手定律确定顺、逆时针旋转方向
    /// </summary>
    /// <param name="from"> 当前向量 </param>
    /// <param name="to"> 比较向量 </param>
    /// <returns></returns>
    private float SignedAngleProject(Vector3 from, Vector3 to, Vector3 plane)
    {
        /* 计算投影向量 */
        Vector3 projectLast = Vector3.ProjectOnPlane(from, plane);
        Vector3 projectCur = Vector3.ProjectOnPlane(to, plane);
        float signed_angle = Vector3.SignedAngle(projectLast.normalized, projectCur.normalized, plane);
        return signed_angle;
    }

3、获取两点之间距离一定百分比的一个点


        /// <summary>
        /// 获取两点之间距离一定百分比的一个点
        /// </summary>
        /// <param name="start">起始点</param>
        /// <param name="end">结束点</param>
        /// <param name="percent">起始点到目标点距离百分比</param>
        /// <returns></returns>
        public static Vector3 CalcBetweenPoint(Vector3 start, Vector3 end, float percent = 0.5f)
        {
            Vector3 normal = (end - start).normalized;
            float distance = Vector3.Distance(start, end);
            return normal * (distance * percent) + start;
        }

4、计算目标物体相对于自身方位(前后左右上下)


        /// <summary>
        /// 计算目标物体相对于自身方位
        /// </summary>
        /// <param name="target"></param>
        public float CalcTargetDirForMe(Transform target, DirectionType directionType, Transform oneself)
        {
            Vector3 dir = (target.position - oneself.position).normalized; //位置差,方向
            float dot;
            if (directionType.Equals(DirectionType.Forward))
                dot = Vector3.Dot(target.forward, dir);//点乘判断前后   //dot >0在前  <0在后
            else if (directionType.Equals(DirectionType.Right))
                dot = Vector3.Dot(target.right, dir);//点乘判断左右
            else if (directionType.Equals(DirectionType.Up))
                dot = Vector3.Dot(target.up, dir);//点乘判断上下
            else
                dot = 0;//中心
            return dot;
        }

        public enum DirectionType
        {
            Forward,
            Right,
            Up,
        }

5、计算目标物体相对于自身方位(前后)


        /// <summary>
        /// 计算目标物体相对于自身方位
        /// </summary>
        /// <param name="target"></param>
        public float CalcTargetDirForMe(Transform target)
        {
            Vector3 dir = target.position - cameraRig.position; //位置差,方向
            float dot = Vector3.Dot(target.forward, dir);//点乘判断前后   //dot >0在前  <0在后 
            return dot;
        }

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 05:18:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 05:18:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 05:18:01       82 阅读
  4. Python语言-面向对象

    2024-03-14 05:18:01       91 阅读

热门阅读

  1. Oracle DBMS_LOCK

    2024-03-14 05:18:01       29 阅读
  2. zabbix-server-pgsql docker镜像备忘

    2024-03-14 05:18:01       32 阅读
  3. 不同数据库中sql如何添加数据

    2024-03-14 05:18:01       40 阅读
  4. MySQL学习记录

    2024-03-14 05:18:01       45 阅读
  5. Vim 编辑器|批量注释与批量取消注释

    2024-03-14 05:18:01       41 阅读
  6. 阿里云国际版源站IP暴露的解决办法

    2024-03-14 05:18:01       46 阅读
  7. Linux-轻量级数据库sqlite-015

    2024-03-14 05:18:01       40 阅读
  8. 网站服务器PHP页面打开速度慢怎么办?

    2024-03-14 05:18:01       37 阅读
  9. 【NLP笔记】文本分词、清洗和标准化

    2024-03-14 05:18:01       43 阅读
  10. 自动驾驶技术

    2024-03-14 05:18:01       50 阅读
  11. GPT-3.5发布:大型语言模型的进化与挑战

    2024-03-14 05:18:01       42 阅读
  12. AI大语言模型GPT & R 生态环境领域数据统计分析

    2024-03-14 05:18:01       37 阅读