2009년 09월 10일
[회전변환] 특정좌표를 중심으로 회전변환

점 S 를 중심으로 점 P 를 R 만큼 회전 하였을때 P' 의 좌표를 구하는 공식!
회전변환 행렬을 보면 이러하다,.
그리고 이것을 정리하면

x' = (x-a) * cosR - (y-b)sinR
y' = (x-a) * sinR + (y-b)cosR
이것을 메소드로 만들면..
private function init():void
{
//특정 오브젝트 sp 의 원래 좌표
sp.x = 100
sp.y = 100
var ob:Object = transformation(0,0,sp.x,sp.y,30*Math.PI/180)
trace(ob.x , ob.y)
sp.x = ob.x
sp.y = ob.y
}
private function transformation(cx:Number,cy:Number,
px:Number,py:Number,
rad:Number):Object
{
var rx:Number = (px-cx)*Math.cos(rad) - (py-cy)*Math.sin(rad) + cx;
var ry:Number = (px-cx)*Math.sin(rad) + (py-cy)*Math.cos(rad) + cy;
return {x:rx , y:ry}
}
와 같이 좌표를 변환할수 있다.
그리고 참고자료 transformation.PDF 을 참고 하면 증명이 될것이다. 고등학교 수학이다.
문득 고등학교 수학선생님이 생각난다. 회전변환이 중요하다고는 하는데 그때당시 이유를
몰랐다. 하지만 프로그래밍을 하고 있는 요즘 그때 생각이 절로 난다.
그리고 약간 어눌하지만 칠판에 쉽게 그리는 3차원 변환좌표와 도형을 그리는 고등학교때
수학선생님은 지금 생각하건데 천재였다. 당시 코싸인과 싸인의 연속, 역함수와 행렬의
연속인 수식은 오늘날 생각하면 3D의 기초 로직이었다.
당시 선생님은 그러한것을 알고 가르치신 건지는 모르겠다만.
내가 기억하는 고등학교 수학선생님은 수업 시작시 수학책 한번만 보고 바로 덮는다.
그리고 예제나 질문을 칠판과 분필을 이용해 풀이했다. 엄청난 악필이었다.
하지만 다른 수학선생님들과 다르게 막힘이나 오답이 거의 없었다. 나이도 꾀 있으셨는데..
그래서인지 약간 고등학교 수준을 벗어나는 3차원 미적분 까지 경험?할수 있었던것같다.
# by | 2009/09/10 10:19 | 수학 | 트랙백(2) | 덧글(10)
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : http://newonlinecasinobonuse..
newonlinecasinobonusesinuk.co.uk...more
제목 : http://helenmccrory.org/
line4...more
근데 어디에 안부글을 남겨야할지 몰라서 여기에 ^^;
P.S 위에 적으신 예는 사실 내장 matrix객체를 사용하면 훨씬 쉽게 해결됩니다. ^^
영광이군요 ~
rx = ((px-rotx)*cos(rad) - (py-roty)*sin(rad))+rotx;
ry = ((px-rotx)*sin(rad) + (py-roty)*cos(rad))+roty;
px , py => 원래 좌표
rotx ,roty => 회전 중심점
https://gaussian37.github.io/math-la-rotation_matrix/
혹시 회전 전/후 두 점과 회전각도를 알때 회전의 중심을 구할수 있나요??