[C#] GDI 좌표계

개발 노트/C#  2012.10.01 15:23



안녕하세요 개발자 명월입니다.

이번 포스팅에서는 GDI 좌표계에 대해 알아 보겠습니다. 물론 좌표계에 대해서는 C# 뿐만 아니라 윈도우 프로그래밍을 사용하는것은 같은 좌표계를 사용합니다.

 

수학에서는 음수가 없는 좌표 기준(0,0)을 왼쪽 하단으로 계산을 합니다. 그러나 윈도우 에서는 왼쪽 상단이 기준으로 움직입니다. 문론 이 위치는 윈도우 전체에 해당이 됩니다. 즉 모니터 기준으로 가장 왼쪽,상단 픽셀이 (0,0)이 되겠습니다. 역시 설명 보다는 예제가 이해하기 빠르겠습니다.

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Drawing;
  5 using System.Windows.Forms;
  6
  7 namespace Blog20121001_0_
  8 {
  9     class Program : Form
10     {
11         static void Main(string[] args)
12         {
13             Application.Run(new Program());
14         }
15         public Program() {
16             this.Load += new EventHandler(Program_Load);
17         }
18         void Program_Load(object sender, EventArgs e)
19         {
20             this.Location = new Point(0, 0);
21         }
22     }
23 }
24

 

 

결과 화면 보면 윈도우 창이 모니터의 왼쪽 상단에서 생성이 됩니다.

두번째 예제 입니다.

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Drawing;
  5 using System.Windows.Forms;
  6
  7 namespace Blog20121001_0_
  8 {
  9     class Program : Form
10     {
11         static void Main(string[] args)
12         {
13             Application.Run(new Program());
14         }
15         public Program() {
16         }
17         protected override void OnPaint(PaintEventArgs e)
18         {
19             Graphics g = this.CreateGraphics();
20             g.DrawLine(new Pen(Color.Black),0,0,ClientRectangle.Width,ClientRectangle.Height);
21         }
22     }
23 }
24

 

DrawLine 의 (0,0)에서 윈도우 크기 너비,높이 길이의 위치 까지 Line을 그리는 것입니다.

 

 

보시다시피 x좌표는 수학과 같으나 y좌표계는 수학과 반대입니다. 즉 y가 증가할 수록 위치는 아래로 내려가겠습니다. 다음은 삼각함수를 이용한 예제입니다.

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Drawing;
  5 using System.Windows.Forms;
  6
  7 namespace Blog20121001
  8 {
  9     class FormClass :Form
10     {
11         static void Main(string[] args)
12         {
13             Application.Run(new FormClass());
14         }
15         float x;
16         float y;
17         float x_;
18         float y_;
19         Timer tm;
20         Graphics g;
21         float angle;
22
23         float width = 200;
24         public FormClass() {
25             this.Size = new Size(500, 500);
26             g = this.CreateGraphics();
27
28             this.x = ClientRectangle.Width / 2;
29             this.y = ClientRectangle.Height / 2;
30
31             tm = new Timer();
32             tm.Interval = 1;
33             tm.Enabled = true;
34             tm.Tick += new EventHandler(tm_Tick);
35         }
36         void tm_Tick(object sender, EventArgs e)
37         {
38             angle++;
39             float radian = (float)(Math.PI / 180) * angle;
40             this.x_ = x + (width * (float)Math.Sin(radian));
41             this.y_ = y - (width * (float)Math.Cos(radian));
42
43             g.DrawLine(new Pen(Color.Black), x, y, x_, y_);
44         }
45     }
46 }
47

 

 

마지막 삼각함수를 이용한 원 좌표는 여러부분에 많이 사용될 수 있으니 첨부하겠습니다.

 

첨부파일 : Blog20121001.zip

 

'개발 노트 > C#' 카테고리의 다른 글

[C#] 비프음  (0) 2012.10.06
[C#] 퍼즐게임 - 2  (0) 2012.10.05
[C#] 서비스 프로그램  (0) 2012.10.05
[C#] 퍼즐게임 - 1  (0) 2012.10.04
[C#] GDI 좌표계  (0) 2012.10.01
[C#] 물리 함수식 만들기 - 공 튀기기 -  (2) 2012.09.25
[C#] 전역 후킹 프로그램  (7) 2012.09.20
[C#] 스포이드 프로그램  (5) 2012.09.19
[C#] GDI Buffer  (3) 2012.09.18

댓글 0개가 달렸습니다.
댓글쓰기