计算给定的可变斜边在轨道路径中的方向向量

时间:2019-04-13 15:22:00

标签: unity3d math trigonometry

enter image description here

在Unity 3D游戏中,我试图使一个对象(D)绕另一个对象(B)旋转,并在位于被绕行的对象(A)上方的另一个对象与绕行的对象之间绘制射线,本质上是描述一个三角形(或圆锥体,给定时间+轨道速度):

该对象通过一些无关的代码符合丘陵地形(随着高度B从轨道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);

    }
}

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

enter image description here

我为Quaternion.AngleAxis轴参数尝试了各种矢量。

0 个答案:

没有答案