如何找到与2D向量垂直的方向?


20

我正在做一个自上而下的游戏,玩家将向前移动到鼠标光标的位置。作为玩家运动代码的一部分,我需要确定一个与玩家当前面对的矢量垂直的矢量(以实现划界行为)。

如何计算给定2D向量的垂直向量?

Answers:


41

要使2D向量垂直于另一个2D向量,只需交换XY分量,取反新的Y分量即可。如此{ x, y }成为{ y, -x }


10
请注意,有两种可能性,而这一种将为您提供左侧的垂直向量。(-y | x)是右侧向量。
TravisG 2014年

1
您应该否定y轴以按照传统惯例进行CCW旋转。
RandyGaul 2014年

@TravisG我认为您左右混为一谈?根据我的计算,(-y,x)是左手垂直向量,(y,-x)是RHS。
PeteUK

12

我总是忘记了在需要时如何执行此操作,因此我编写了一些扩展方法。

    public static Vector2 PerpendicularClockwise(this Vector2 vector2)
    {
        return new Vector2(vector2.Y, -vector2.X);
    }

    public static Vector2 PerpendicularCounterClockwise(this Vector2 vector2)
    {
        return new Vector2(-vector2.Y, vector2.X);
    }

和单元测试

    [Test]
    public void Vector2_Perpendicular_Test()
    {
        var a = new Vector2(5, -10);
        var b = a.PerpendicularClockwise();
        var c = a.PerpendicularCounterClockwise();

        Assert.AreEqual(new Vector2(-10, -5), b);
        Assert.AreEqual(new Vector2(10, 5), c);
    }

垂直线


如果您有向量(5,-10),那么它将在第4象限,对吧?如果再顺时针旋转,它是否不在象限3中,即两个分量均为负值?您的功能混在一起了吗?
PeteUK

相反。PerpendicularCounterClockwise应该返回(10,5),而PerpendicularClockwise应该返回(-10,-5)。
opetroch

2
哦,我的..这是错误的三年。我向使用它的任何人致歉。我现在已经确定了答案,并绘制了图表以证明这次是有意义的。感谢@opetroch和PeteUK指出了这一点。抱歉,纠正它花了很长时间。
Craftworkgames

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.