퇴근5분전

 나에게 행렬이란? 계산방법이나 결과값을 구하는건 알겠는데... 그래픽에 막상 적용해놓고도 이게 뭔가... 싶은것?
역시 수학 기초가 딸리면 멍때리는건 시간문제얌 ㅡ.,ㅡ;;;


얼마전 훈스에 올라온 행렬 구하는 객체가 있는가에 대해 검색좀 해보니 Matrix란게 있었는데...

또 마침 별그리는것... 선 이동시하는것등... 갑자기 또 관심종목이 ㅡ.,ㅡ;;;


 오늘 저녁엔 Matrix를 가지고 놀아보자 해서 별그리는데 써보기로 했다.

그럼 이 Matrix는 뭐하는 놈인고 하니 MSDN 에 보니 이 놈이 좌표변환 하는데 쓰이는 놈이었다.

3D 구현때보다는 머 나름 편했다.  3D는 아직도 이해 불가..( 절두체 ㅡ.,ㅡ;; )

2D로 별을 그린다고 했을때

  private void DrawStar(Graphics g, double r, PointF p)
        {
            PointF[] ps = new PointF[6];
            double RadianTheta = 0d;
            int cnt = 0;
            for (double i = 0; i <= 720d; i += 144d)
            {
                RadianTheta = (angle + i) * Math.PI / 180d;
                ps[cnt] = new PointF(p.X + (float)(r * 1d * Math.Cos(RadianTheta)),
                                                  p.Y + (float)(r * 1d * Math.Sin(RadianTheta)));
                cnt++;
            }
            g.DrawLines(Pens.Red, ps);
            g.DrawEllipse(Pens.Blue, p.X - 5, p.Y - 5, 10, 10);
        }

말할것도 없이 이거답... angle은 회전각인데.. 별을 빙글~빙글~ 돌려봤다..

이게 오히려 나에겐 이해하기 쉽다...

  private void DrawStar(PaintEventArgs e)
        {
            PointF[] starPointFs = new PointF[6];
            int cnt = 0;
            double theta = 0f;
            for (double i = 0; i <= 720d; i += 144d)
            {
                theta =( i - 5f) * Math.PI / 180d;
                starPointFs[cnt] = new PointF((float)Math.Cos(theta), (float)Math.Sin(theta));
                cnt++;
            }
            e.Graphics.DrawLines(Pens.Red, starPointFs);

            //Matrix를 이용한 좌표변환 그리기...
            Matrix mx = new Matrix(1f, 0f, 0f, 1f, this.Width/2, this.Height/2);
            mx.Scale(100f, 100f);
            mx.Rotate((float)angle);
            mx.TransformPoints(starPointFs);               
    
            e.Graphics.DrawLines(Pens.Black, starPointFs);
        }

Matrix의 기본 파라미터값( Sx , Rx, Ry, Sy, Dx, Dy ) 임.

Rx, 나 Ry를 값을 주면 왜곡되는데... 왜그런지 모르겠넹... 쩝.

매트릭스로 구현한 소스이다.
기초 메트릭스를 생성하고 여기에 크기변환,  회전값을 주고
별의 각 점좌표를 주고 변환 한다!
그리고 그려주면 별이 그려진다.

소스상에 i - 5f 는  두개의 별을 동시에 그리면 위상이 같아서 겹치므로 위상차를 주었다.

간단하게나마 매트릭스를 그려보았다.

음 어따 써먹쥐?????????????????????????????  이걸 왜했을까?

구현된 스샷!

# 실제 이미지는 타이머로 빙글 빙글 돌리고 있다....



'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

글꼴 폰트 관련 MSDN 링크  (0) 2010.08.10
소수 구하기 소스...  (0) 2010.08.06
IFormattable  (0) 2010.07.15
트리노드 검색해서 확장하기...  (0) 2010.03.17
목록 로테이션???  (0) 2010.03.16