2D 벡터에 대한 수직을 어떻게 찾을 수 있습니까?


20

플레이어가 마우스 커서의 위치를 ​​향해 앞으로 이동하는 하향식 게임을 만들고 있습니다. 플레이어의 움직임 코드의 일부로, 플레이어의 현재 대면 벡터에 수직 인 벡터를 결정해야합니다 (스트래핑 행동을 구현하기 위해).

주어진 2D 벡터의 수직 벡터를 어떻게 계산할 수 있습니까?

답변:


41

2D 벡터를 다른 2D 벡터에 수직으로 가져 오려면 단순히 XY구성 요소를 바꾸고 새 Y구성 요소를 무시하십시오 . 이렇게 { x, y }됩니다 { y, -x }.


10
두 가지 가능성이 있으며,이 방법으로 왼쪽 수직 벡터를 얻을 수 있습니다. (-y | x)는 오른쪽 벡터입니다.
TravisG

1
전통적인 규칙에 따라 CCW 회전을하려면 y 축을 무효화해야합니다.
RandyGaul

@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
오 마이 .. 이것은 3 년 동안 잘못되었습니다. 그것을 사용하는 사람에게 사과드립니다. 이제 답변을 수정하고 이번에는 이해가되는지 입증하기 위해 다이어그램을 그렸습니다. 이것을 지적 해준 @opetroch와 PeteUK에게 감사합니다. 수정하는 데 시간이 오래 걸렸습니다.
craftworkgames

4

이면 (도끼, 에이)90도 반 시계 방향으로 회전하여 a-perp, 즉(-ay, 도끼)

링크를 참조하십시오 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.