首页 > 解决方案 > 计算轨道路径中给定可变斜边的方向向量

问题描述

在此处输入图像描述

在 Unity 3D 游戏中,我试图让一个对象 (D) 围绕另一个对象 (B) 运行,并在位于被环绕对象 (A) 上方的另一个对象和环绕对象之间绘制一条射线,基本上描述了一个三角形(或圆锥,给定时间+轨道速度):

物体通过一些不相关的代码符合丘陵地形(在轨道上从高度 B 向上或向下移动),然而,这有时意味着它的位置比最大长度更远,例如,如果它沿着陡峭的山谷或向上移动陡峭的山坡高于 A。

我遇到的困难是计算从变换 A 到最大长度允许的地形上最远点的向量。换句话说 - 在上图中,最终方向线是围绕 A 旋转的最大长度线,直到它击中地形,无论地形的高度或角度如何,这都是我所追求的。

我的三角学非常基础,但我认为从 AC 和 AB 的切线计算角度,然后将其四元数乘以方向矢量 (c - a) 将给出 A 的正确方向。这是轨道物体 D 上的代码:

private void Update()
{
    transform.RotateAround(transformB.position, Vector3.up, rotSpeed * Time.deltaTime);

    if (Physics.Raycast(transform.position, -transform.up, out hit, 100))
    {
        float angleDeg = Mathf.Atan2(transformA.position.y, 
            Vector3.Distance(hit.point, transformA.position)) * Mathf.Rad2Deg;

        Quaternion q = Quaternion.AngleAxis(angleDeg, Vector3.left);

        Vector3 dir = q * (new Vector3(hit.point.x, transformA.position.y, 
            hit.point.z) - transformA.position);

        Debug.DrawRay(firingTransform.position, dir, Color.green, 0.1f);

    }
}

它似乎只在一半的轨道上正常工作:

在此处输入图像描述

我已经Quaternion.AngleAxis为轴参数尝试了各种向量。

标签: unity3dmathtrigonometry

解决方案


推荐阅读