문제

2D 도면을하고 있으므로 약간의 매트릭스 변환을 구현하고 싶습니다. 내 빛의 수학 배경으로 나는 C #에서 어떻게 그렇게하는지 이해하려고 노력하고 있습니다. (다른 OOP 언어는 분명히 할 수 있습니다).

읽은 모든 것은 번역에 대처할 수 있도록 3x3 매트릭스와 함께 일해야한다는 것을 설명하고 있습니다. 곱셈으로 번역을 할 수 없기 때문에. 그러나 이것은 우리가 변형을 창출하는 행렬의 곱셈을 사용합니다. 그래서 우리는 다음과 같이 일합니다 :

{ x1, x2, tx }
{ y1, y2, ty }
{ 0,  0,  1  }
.

세 번째 열의 평균을 이해하지만 세 번째 행이 필요한 이유는 무엇입니까? 신원 매트릭스뿐만 아니라 회전, 스케일 또는 회전에서 마지막 행은 동일합니다. 내가 필요로하는 작업이 있지 않은 작업이 있습니까? 일부 언어 (Java)는 "제곱 차원"배열로 더 잘 수행되기 때문입니까? 그렇다면 C #에서 3 개의 열과 2 행을 사용할 수 있습니다 (Jagged Arrays는 잘 작동하거나 더 잘 작동합니다).

예를 들어 회전 + 번역의 경우 i 이와 같은 매트릭스가 있습니다

{ cos(rot)*x1, (-sin(rot))*x2, tx }
{ sin(rot)*y1, cos(rot)*y2,    ty }
{ 0,           0,              1  }
.

마지막 행이 필요 없습니다.

도움이 되었습니까?

해결책

이것은 우리가 변형을 창출하는 행렬의 곱셈을 사용하고 있습니다

은 우리가 사각형 매트릭스를 원하는 이유입니다.

우리가 제안한 것을 수행하고 우리의 변환을 위해 2x3 매트릭스를 사용했다고 가정합니다.

회전은

( x1, x2, 0 )
( y1, y2, 0 )
.

및 번역은

( 1, 0, tx )
( 0, 1, ty )
.

우리는 매트릭스를 지점을 나타내는 열 벡터에 의해 매트릭스를 곱하여 회전 또는 번역을 수행 할 수 있습니다.

    ( x )
M   ( y )
    ( 0 )
.

정답을 얻으려면

그러나 - 변형을 어떻게 생각합니까? 실제로, 당신의 "회전 + 번역을 위해 나는이"예를 들어 매트릭스가 있습니다. "은 그 매트릭스를 어떻게 얻었습니까? 물론,이 경우, 단지 그것을 쓸 수 있습니다, 그러나 일반적으로? 글쎄, 당신은 대답을 알고 있습니다 :

이것은 우리가 변형을 창출하는 행렬의 곱셈을 사용하고 있습니다

2 개의 변형 매트릭스를 곱하여 다른 변환 행렬 을 곱하게 할 수 있어야합니다. 매트릭스 곱셈의 규칙은 다음과 같습니다.

( . . . ) ( . . . )
( . . . ) ( . . . ) = ???
.

는 유효한 매트릭스 곱셈이 아닙니다. 우리는 우리의 변화가 합성 가능하기 위해 곱해질 수있는 행렬이 필요합니다. 그래서 우리는 그 여분의 행을 가지고 있습니다.


이제는 여기에서 표현하는 방식은 실제로 회전 및 번역의 익숙한 변환이 전사적 인 비행기에서 균일 한 좌표 변환의 완전한 힘의 특별한 사례 일뿐입니다. 그러나 매트릭스 스퀘어를 만들기 위해 여분의 행이 필요한지 보여주기 위해 당신에게 보여줄 것이라고 생각합니다.

다른 팁

대답은 균질 한 좌표입니다.하나의 조작에서 회전 및 번역을 결합하려면 모델이 요구하는 것보다 하나의 추가 차원이 필요합니다.평면의 것들은 3 가지 구성 요소이며 공간적 인 것들은 4 개의 구성 요소입니다.운영자는 3 개의 구성 요소를 취하고 3x3 매트릭스가 필요한 3 개의 구성 요소를 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top