0

치수 (2, 2)의 이미지 I을 가정합니다. 그래픽은 C 좌표를 주어로 :GPU에서 중심에 대한 이미지 회전

C = [[0, 0], [1, 0], 
    [0, 1], [1, 1]] 

목적 : 중앙 (NOT 기원) 약 90도 내가 돌립니다.

변환 행렬 :

TRotate (90) = [0,1], [-1, 0]

(즉 ON (각 쌍의 록 스텝에서 변환 될 수 좌표 가정 GPU를))

방법 :.

  1. 전환 그래픽 좌표를 원점을 이미지의 중심으로하는 수학 좌표로 변환합니다.
  2. 변환 행렬을 적용하십시오.
  3. 그래픽 좌표로 변환하십시오.

예 :

그래픽 좌표 변환 :

TX '= TX - 폭/2

TY'= TY - 폭/2

C' =[[-1, -1], [0, -1], 
    [-1, 0], [0, 0]] 

변환 행렬을 적용하십시오.

C" = [[-1, 1], [-1, -0], 
     [0, 1], [0, 0]] 

다시 변환 : 나는 정말 '무게 중심'작업에 대한 적절한 회전을 얻기 위해 싸우고있어

C" = [[0, 2], [0, 1], 
     [1, 2], [1, 1]] 

변환이 다시 범위를 벗어났습니다 ...

. 나는 수학 좌표로의 변환이 잘못되었다고 생각한다.

C' =[[-1, -1], [1, -1], 
    [-1, 1], [1, 1]] 

내가 원점으로 상기 4 개 개의 화소 사이에 존재하는 경우가 + 아래쪽을 가리키는 Y 축 적이 있음을 관찰함으로써 이러한 변화를 달성 :

차라리 다음에 좌표 변환함으로써 더 운이 , 오른쪽에 + ve x 축이 있으면 나머지 (0,0)는 (-1, -1)이됩니다. 결과적인 회전과 변환은 원하는 결과를 제공합니다.

그러나 센터에 원점 배치 좌표에 적용하려면 올바른 종류의 변형을 찾을 수 없습니다. 동질적인 좌표를 사용하여 변형 행렬을 시도했지만 작동하지 않습니다.

편집 말콤의 대한 조언

다음 곱하여

[-1 
-1 
0] 

회전 :

위치 벡터 =

[0 
0 
1] 

폭/2 == 1을 감산함으로써 번역 변환 행렬 :

|-1| | 0 1 0| |-1| 
|-1| X |-1 0 0| = | 1| 
|0 | | 0 0 1| | 0| 

답변

1

x로 변환하고 y로 변환하려면 행렬에 여분의 행이 필요합니다. 그런 다음 위치 벡터에 추가 열을 추가합니다 (w는 1로 하드 코딩 됨). 이것은 표준 행렬 곱셈을 사용하여 변환을 수행 할 수 있는지 확인하는 트릭입니다.

회전이 뒤 따르는 변환이 필요하기 때문에 변환 행렬을 설정 한 다음 회전 행렬을 곱해야합니다 (행렬 곱셈에 불안정 할 경우 마지막 열이 모두 무시되는 3x3으로 만듭니다) . 그래서 번역과 회전은 서로 얽혀있을 것입니다.

+0

안녕 Malcom. 위치 벡터에서 [x, y, w]가 w = 1 인 추가 행을 의미합니까? 그리고 변환 행렬에 대한 추가 열과 행을 의미합니까? – user1658296

+1

당신은 당신의 점을 열 또는 행으로 생각할 수 있습니다. 그래서 그것을 [x y w]로 그리면 열이 있고, 그것을 수직으로 그리면 행이 있습니다. 행렬이 역행렬을 사용하는 한 (열이 행을 일치하거나 그 반대의 경우) 중요하지 않습니다. 그러나 행렬이 정사각형인지 쉽게 이해할 수 있습니다. –

+0

감사합니다. Malcolm, 결과는 그래픽 좌표로 다시 변환하기가 어렵습니다. [-1, 1, 0]은 그래픽 좌표의 점 [0, 1]이어야합니다. – user1658296