2012-12-07 14 views
1

저는 기본 사인과 2D 사면을 매우 성공적으로 조작하여 3 차원 시각을 제공합니다.죄와 코사인 변환을 역전하십시오.

내가 겪고있는 문제는 뷰포트에 보이는 것을 찾으려고 노력 중입니다. 반대로 변환을 효과적으로 수행하면 출력은 [0,0]과 [너비, 높이]이며 맵에서 내 포인트가 어디에 있는지 알고 싶습니다.

display_x = (source_x * cos(z)) + (source_y * sin(z)) 
display_y = (source_y * cos(z)) - (source_x * sin(z)) 

내가 display_xdisplay_ysource_x을 알고 source_y가 미지수 인 경우는, 어떻게 미지수가 무엇인지 해결할 수 :

나는 반전을 시도 지점에있어? 내 동시 방정식 지식은 녹슬지 않습니다.

답변

5

:

source_x = (display_x * cos(z)) - (display_y * sin(z)) 
source_y = (display_x * cos(z)) + (display_y * sin(z)) 

이 것을 사용

http://en.wikipedia.org/wiki/Rotation_matrix

[ cos(z), sin(z) ] [ source_x ] = [ display_x ] 
[-sin(z), cos(z) ] [ source_y ] [ display_y ] 

) display_y의 이 행렬을 반대로 바꾸려면 행렬이 직각이되도록 보장해야하기 때문에 대각선 위로 뒤집힌 것을 찾아야합니다.

은 그래서해야한다 :

display_x = (source_x * cos(z)) - (source_y * sin(z)) 
display_y = (source_x * sin(z)) + (source_y * cos(z)) 
+0

완벽한 감사합니다. 나는 당신이 당신의 대답에 같은 오타를 베낀 것을 알아 차렸다. :) – Nick

+0

나는 단지 순서를 바꿨다고 생각한다. source_x는 거기에있다 :) cos (z) == cos (-z)이기 때문에 Thomas Andrew의 반응이 옳다는 것은 흥미 롭다. 그래서 정말로 sin) – Cholesky

1

변형은 각도 z로 회전하므로 각도 -z로 회전하여 반전해야합니다. 이 금리는 : 당신은 효과적으로 2D 회전 행렬 (나는 당신이 정의에 source_y에 대한 source_x을 교환 오타가 확신 사용하고

cos(z) == cos(-z) 
sin(-z) == -sin(z)