首页 > 解决方案 > Unity - 关于向量计算的数学问题

问题描述

我正在寻找以下问题的数学公式(在 3 维空间中,所以它大约是 3 维向量)。我在 Unity 中编程 - GameEngine (C#)

在第一张图片中,您可以看到我当前的结果。我创建了 2 个向量(红色球体)并自动生成一个锚点(图中的绿色)。这个锚点总是在第二个向量“后面”生成(在一条直线上)。这两个向量始终是当前向量和前一个向量。我当前的计算(第一张图片)如下所示:

 Vector3 direction = newVector.position - previousVector.position;
 Vector3 newAnchor.position = newVector.position + direction;

我需要的显示在第二张图片中。我希望始终在第二个向量的“右侧”90 度生成锚点(绿色)(相对于两个向量的方向)。但是,我无法为此得出数学计算。

希望我可以用图片来描述我试图实现的目标。

第一张图:

第一张图:

第二张图:

第二张图:

标签: c#unity3dmathvectorcalculation

解决方案


二维

为了将矢量旋转 90 度,您所要做的就是切换x 和 y 分量并反其中一个。您可以制作扩展方法,允许您直接在向量上调用vector.Left()& 。vector.Right()

public static class VectorX
{
    public static Vector2 Left(this Vector2 v)
    {
        return new Vector2(-v.y, v.x);
    }

    public static Vector2 Right(this Vector2 v)
    {
        return new Vector2(v.y, -v.x);
    }
}

3D

您可以使用Cross Product,它返回一个与其他两个垂直的向量。

var right = Vector3.Cross(forward, up).normalized;

因此,如果您给出一个点的前向矢量和向上矢量,您将收到一个指向右侧的矢量。如果你想让它指向左边,你可以否定它。


推荐阅读