article search result of 'Cos' : 2

  1. 2010.12.04 [회전변환] 특정좌표를 중심으로 회전변환 (122)
  2. 2010.12.04 원의 자취 구하기 (82)

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


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

점 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차원 미적분 까지 경험?할수 있었던것같다.


'수학' 카테고리의 다른 글

[Draw Line Algorithm] 1. 기본(2) 총정리  (90) 2010.12.04
[Draw Line Algorithm] 1. 기본(1)  (65) 2010.12.04
[회전변환] 특정좌표를 중심으로 회전변환  (122) 2010.12.04
[삼각함수] 기울어진 그리드의 좌표 구하기  (39) 2010.12.04
정렬  (45) 2010.12.04
atan2 를 "도" 로 환산  (200) 2010.12.04
Yamecoder 야매코더_
수학 2010.12.04 03:38

원의 자취 구하기


원의 자취 구하기 수학


각도 sin(angle) = 높이(b) / 빗면(c)
각도 cos(angle)= 밑면(a) / 빗면(c)

밑면(a) = cos(angle)* 빗면(c)
높이(b) = sin(angle) * 빗면(c)

p1.x = cos(angle) *빗면(c)
p1.y = sin (angle) *빗면(c)

기초에 충실하자! 고등학교때 '얼싸안코' 가 생각난다.


또한 이를 응용하여 가로 세로 값을 알고 있을때는..

tan( angle ) = height/width
이고 , 각을 알기 위해 tan 를 넘겨야한다.

( angle ) = atan( height/width )
넘길때는 tan의 역수인 atan으로 넘긴다.

angle을 cos , sin 에 대입하여 푼다



또한 원의 중심점을 옮겨 자취를 구해야 할 상황이 생긴다.

                    var cx:Number = 100 // 가로로 움직일 양
                    var cy:Number = 100 // 세로로 움직일 양
                    var theta:Number = Math.atan2(mouseY - cy , mouseX - cx)
                    var p:Point = CirclePosition(theta , 100 , cx , cy)
                   
                    ob.x = p.x
                    ob.y = p.y

                   function CirclePosition( theta:Number,Radius:Number=100,cx:Number=0,cy:Number=0 ):Point
                  {
                          var tx:Number = cx+Radius*Math.cos(theta);
                          var ty:Number = cy+Radius*Math.sin(theta);
                          return new Point(tx,ty);
                  }

 만약 타원을 원한다면 tx 와 ty 의 반지름을 달리하면 된다!
Yamecoder 야매코더_
수학 2010.12.04 03:36
Powerd by Tistory, designed by criuce
rss