글로벌 좌표 공간에서 로컬 공간으로 어떻게 변환합니까?


13

이라는 엔티티가 주어지면 EntityA로컬 좌표 공간을 정의하고 싶습니다. 여기서의 위치 EntityA는 원점이고 제목 벡터는 X 축이며 제목 벡터의 법선은 Y 축입니다.

같은 그림 설명

글로벌 좌표를 감안할 때 EntityA로컬 공간 에서 다른 엔티티의 위치를 ​​어떻게 찾을 수 있습니까?

예를 들어, EntityA'글로벌 위치는 (50,50)이고 그 위치 EntityB는 (80,90)입니다. 의 로컬 공간 EntityB에서 의 위치는 무엇입니까 EntityA?

편집 : 수학에 쉽게 가십시오.

답변:


21

자, 객체 A에 대한 월드 변환 행렬이 무엇인지 알고 있다고 가정하면, 그 행렬의 역을 구성하기 만하면됩니다.

Global Space로 가져 오는 데 사용되는 객체 A의 회전, 스케일링 및 변환 행렬이 각각 R , ST 라고 가정합니다 . 당신은 이것들을 같이 곱할 것입니다

S * R * T = W

이제 W 를 가지고 역 W ^ -1을 어떻게 든 찾으십시오 . 행렬의 반대는 그 반대의 행렬입니다. 역행렬을 가진 행렬의 곱은 항상 항등 행렬입니다.

W * W ^ -1 = 나는

따라서 W ^ -1 = I / W ;

이제이 역행렬을 월드에 월드 변환으로 적용하면 각 오브젝트가 원하는 좌표에있게됩니다

행렬 곱셈에 대해서는 이 페이지를 참조 하십시오. 항등 행렬에 대해서는 이 항목을 참조 하십시오.

다음W 를 만드는 데 필요한 행렬을 제공하는 다른 페이지입니다 .

위의 질문에서 x 축의 변환은 50으로, y 축의 변환은 50으로, 두 축의 배율은 없으며, 지정하지 않은 회전을 수행해야합니다.


답변 주셔서 감사하지만 실제로이 사실을 많이 이해하지 못합니다. 수학에는 좋지 않습니다. 매트릭스 란? '회전, 스케일링 및 변환 행렬'이란 무엇입니까?
Aviv Cohn

매트릭스 상호 숫자 나 개체의 집합을 표현하는 매우 컴팩트 한 방법입니다. 컴퓨터 그래픽에서는 계산에 광범위하게 사용됩니다. 대답의 마지막 링크를 확인하여 회전 변환 및 스케일링 행렬의 의미를 알 수 있습니다. 예, 모든 것을 읽어야합니다. 그렇지 않으면 ashes999의 방법을 사용하여 문제를 해결할 수 있지만 EntityA의 회전 및 스케일링이있는 경우 설명하지 않습니다.
라이트 스파크

9

과거에는 행렬 대신 삼각법 으로이 작업을 수행했습니다 (매트릭스 멍청한 놈입니다). Ashes999의 대답은 중간에 있고 상대 벡터를 얻은 다음 EntityA의 각도의 역으로 ​​회전합니다.

   relativeX = B.x - A.x
   relativeY = B.y - A.y
   rotatedX = Cos(-Angle) * relativeX - Sin(-Angle) * relativeY
   rotatedY = Cos(-Angle) * relativeY + Sin(-Angle) * relativeX

2
+1 행렬보다 훨씬 직관적이고 사용하기 쉬운 삼각법.
Ramchandra Apte

규모는 어떻습니까? 언제 신청합니까?
Llamageddon 2016 년

죄송합니다. 회전을 의미합니다.
Llamageddon

6

The Light Spark의 답변과 Elliot의 답변 사이에 뭔가를 주려고합니다. 왜냐하면 내가 읽은 것에서 수학은 단지 당신에게 던져지는 것이 아니라 따라야 할 알고리즘을 찾고 있기 때문입니다.

문제 진술 : 위치 A (50, 50)와 제목 이 있다면 (제공하지 않았으므로이라고 가정 y = 2 * x + 25) 제목과 B (80, 90)관련이 있는 곳을 찾으십시오 A.

당신이하고 싶은 것은 실제로 매우 간단합니다. 1) A시스템의 원점으로 이동하십시오. 이는 단순히 로컬- A값이 전역 위치 값에서 전역 위치 값을 뺀 값이 됨을 의미합니다 A. A하게 (0, 0)B된다 (30, 40).

1.1) 제목도 이동해야합니다. local-to- Aterm 의 y 절편 이 항상 0이고 기울기가 변하지 않기 때문에 실제로 수행하기가 매우 쉽습니다 y = 2 * x.

2) 이제 이전 제목을 X 축에 정렬해야합니다. 그래서 어떻게해야합니까? 개념적으로 가장 쉬운 방법은 x, y 좌표에서 극좌표 시스템으로 변환하는 것입니다. 극 좌표계는 R, 위치까지의 거리 및 phix 축으로부터의 회전 각도를 포함합니다. R로 정의 sqrt(x^2 + y^2)되고 phi로 정의됩니다 atan(y / x). 요즘 대부분의 컴퓨터 언어 atan2(y, x)는 계속해서 동일한 기능을 수행 atan(y/x)하지만 출력이 0도에서 360 도가 아닌 -180도에서 180 도인 경향이 있지만 어느 쪽이든 작동하는 방식으로 기능을 정의합니다.

B따라서하게 R = sqrt(30^2 + 40^2) = sqrt(2500) = 50phi = atan2(40, 30) = 53.13도이다.

마찬가지로 제목이 변경됩니다. 이것은 설명하기가 약간 까다 롭지 만 정의에 따라 제목이 항상 원점을 통과 A하기 때문에 R구성 요소 에 대해 걱정할 필요가 없습니다 . 제목은 항상 상수 의 형식으로 phi = C되어 C있습니다. 이 경우에는 phi = atan(2 * x / x) = atan(2) = 63.435도입니다.

이제 시스템을 회전하여 제목을 로컬 A시스템 의 X 축으로 옮길 수 있습니다 . A시스템의 원점으로 옮길 때와 마찬가지로 시스템의 phi모든 phi값에서 제목을 빼면 됩니다. 그래서 phi의가 B53.13 - 63.435 = -10.305정도.

마지막으로 극좌표에서 x, y 좌표로 다시 변환해야합니다. 이 변환을 수행하는 공식은 X = R * cos(phi)Y = R * sin(phi)입니다. 들어 B그러므로, 우리는 도착 X = 50 * cos(-10.305) = 49.2하고 Y = 50 * sin(-10.305) = 8.9그래서, B지역 대에 A에 가까운 좌표 (49,9).

잘하면 그것은 도움이되고, 당신이 따라야 할 수학에 충분히 가볍습니다.


1

전역 공간 (x1, y1, θ)에서 엔티티 A의 자세를 알아야합니다. 여기서 θ는 x 축을 기준으로 한 방향입니다.

EntityB 위치를 글로벌 좌표 (x2, y2)에서 로컬 좌표 (x2 ', y2')로 변환하려면 다음을 수행하십시오.


  1. 식 사용

글로벌에서 로컬로

x2' = (x2-x1)cosθ + (y2-y1)sinθ

y2' = -(x2-x1)sinθ + (y2-y1)cosθ

로컬에서 글로벌로

x2 = x2'cosθ - y2'sinθ + x1

y2 = x2'sinθ + y2'cosθ + y1

  1. 행렬 사용하기 :

    R = [cosθ   -sinθ
    
         sinθ    cosθ]
    
    A = [x1
         y1]
    
    B_global = [x2
                y2]
    
    B_local = [x2' 
               y2']

글로벌에서 로컬로

    B_local = inv(R) x (B_global - A)

로컬에서 글로벌로

    B_global = R x B_local + A

-2

간단히 엔티티 B를 넣으려면 엔티티 A에 대한 참조가 필요합니다. 그런 다음 엔티티의 A 위치와 엔티티 B의 위치 간의 차이를 가져와야합니다.


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