[회전변환] 특정좌표를 중심으로 회전변환


점 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 superSC | 2009/09/10 10:19 | 수학 | 트랙백(2) | 덧글(7)

트랙백 주소 : http://scripter.egloos.com/tb/1618411
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from newonlinecas.. at 2013/03/31 01:50

제목 : http://newonlinecasinobonuse..
newonlinecasinobonusesinuk.co.uk...more

Tracked from at 2014/03/11 00:33

제목 : http://helenmccrory.org/
line4...more

Commented by hika at 2009/09/10 19:26
uiaa를 타고 들어왔습니다.
근데 어디에 안부글을 남겨야할지 몰라서 여기에 ^^;

P.S 위에 적으신 예는 사실 내장 matrix객체를 사용하면 훨씬 쉽게 해결됩니다. ^^
Commented by superSC at 2009/09/14 17:49
아~~ 네!! 감사합니다.. 이렇게 미천한 블로그에 초고수 님께서 방문해주셨다니!!
영광이군요 ~
Commented by kym at 2011/02/07 14:23
마지막 회전 변환하고 a,b 각각 더해줘야 대는거 아닌가요?
Commented by JSHacker at 2011/07/03 16:19
마지막 회전 변환하고 a,b 더해 줘야 하네요^^
Commented by 555 at 2012/05/23 13:43
이 공식 틀렸네요...글 내리심이 좋으실듯...
Commented by 야매코더 at 2013/04/07 18:04
오래전에 철없던 시절에 쓴 글을 발견 했습니다. 정정 합니다.

rx = ((px-rotx)*cos(rad) - (py-roty)*sin(rad))+rotx;
ry = ((px-rotx)*sin(rad) + (py-roty)*cos(rad))+roty;

px , py => 원래 좌표
rotx ,roty => 회전 중심점
Commented by sspiinc at 2017/02/15 14:30
오래된 글이지만 수정 해주신 공식보고 도움 얻어 갑니다~ 고마워요

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶