9.º¯È¯

°¡.¿ùµå º¯È¯

µµÇüÀ» Ãâ·ÂÇÏ´Â ±×·¡ÇÈ ¸Þ¼ÒµåµéÀº ¿¹¿Ü¾øÀÌ ÁÂÇ¥¸¦ Àμö·Î Àü´Þ¹Þ´Â´Ù. ¾î¶² µµÇüÀ̵簣¿¡ ¾îµð´Ù Ãâ·ÂÇÒ °ÍÀÎÁö À§Ä¡¸¦ ÁöÁ¤ÇØ¾ß ÇϹǷΠ±×·¡ÇÈ ÇÔ¼öµéÀÌ ÁÂÇ¥¸¦ ¿ä±¸ÇÏ´Â °ÍÀº ´ç¿¬ÇÏ´Ù. ¿¹¸¦ µé¾î DrawLineÀº µÎ °³ÀÇ ÁÂÇ¥¸¦ Àü´Þ¹Þ¾Æ (10,20)¿¡¼­ ½ÃÀÛÇÏ¿© (30,40)±îÁö ¼±À» ±ß´Â´Ù. Á÷¼±Àº 2Â÷¿ø Æò¸é»óÀÇ ÁÂÇ¥ µÎ °³·Î ±¸¼ºµÇ¹Ç·Î ÁÂÇ¥ Á¤º¸ µÎ °³°¡ À־ ¼±À» ±×À» ¼ö ÀÖ´Ù.

À̶§ ±×·¡ÇÈ ¸Þ¼Òµå·Î Àü´ÞµÇ´Â ÁÂÇ¥´Â È­¸é»óÀÇ ÁÂÇ¥°¡ ¾Æ´Ñ ¿ùµå ÁÂÇ¥ÀÌ´Ù. GDI+´Â ¿ùµå, ÆäÀÌÁö, Àåºñ¶ó´Â ¼¼ °¡ÁöÀÇ ÁÂÇ¥ °ø°£À» °ü¸®ÇÑ´Ù. ¿ùµå °ø°£Àº °¡»óÀÇ ³í¸®ÀûÀÎ ÁÂÇ¥ °ø°£ÀÌ¸ç ±×·¡ÇÈ ¸Þ¼ÒµåµéÀº ¿ùµå °ø°£¿¡ ±×¸²À» ±×¸°´Ù. ±×·¡ÇÈ ¸Þ¼ÒµåÀÇ ÁÂÇ¥µéÀº ´ÙÀ½°ú °°Àº º¯È¯À» ÅëÇØ ÃÖÁ¾ÀûÀ¸·Î Àåºñ·Î Ãâ·ÂµÈ´Ù.

Áö±Ý±îÁöÀÇ ¿¹Á¦¿¡¼­ ÀÌ·± º¯È¯ÀÇ Á¸À縦 ÀüÇô ´À³¢Áö ¸øÇß´Ù. (10,20) ÁÂÇ¥¿¡ ¹º°¡¸¦ Ãâ·ÂÇϸé ÀÛ¾÷¿µ¿ªÀÇ (10,20) ÁÂÇ¥¿¡ Á¤È®ÇÏ°Ô Ãâ·ÂµÈ´Ù. ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â µðÆúÆ® º¯È¯ °ø½ÄÀÌ »ó¼ö º¯È¯À¸·Î Á¤ÀǵǾî ÀÖ¾î ¿ùµå ÁÂÇ¥°¡ ±×´ë·Î ÀåÄ¡ ÁÂÇ¥°¡ µÇ±â ¶§¹®ÀÌ´Ù. µðÆúÆ® º¯È¯¿¡¼­´Â ±×·¡ÇÈ ¸Þ¼Òµå°¡ ÀÔ·Â ¹Þ´Â ¿ùµå ÁÂÇ¥°¡ ÀåÄ¡ ÁÂÇ¥¿Í ÀÏÄ¡ÇÏ¿© º¯È¯µÇÁö ¾Ê´Â °Í°ú °°¾Ò´Ù. ±×·¯³ª º¯È¯ °ø½ÄÀ» º¯°æÇϸé ÁÂÇ¥¸¦ Çؼ®ÇÏ´Â ¹æ¹ýÀÌ ´Þ¶óÁö¹Ç·Î ½ÇÁ¦ È­¸é¿¡ Ãâ·ÂµÇ´Â ÁÂÇ¥³ª ¸ð¾ç¿¡ ´Ù¾çÇÑ º¯È­°¡ »ý±â°Ô µÈ´Ù. ÀÌ·± º¯È­¸¦ ÁÖ±â À§ÇØ GDI+´Â ÁÂÇ¥ °ø°£ÀÇ ¼¼ °³³ª Á¤ÀÇÇÏ°í º¯È¯À̶ó´Â °ø½ÄÀ» Àû¿ëÇÏ´Â °ÍÀÌ´Ù.

GDI¿¡µµ º¯È¯°ú À¯»çÇÑ ¸ÊÇÎ ¸ðµå¶ó´Â °³³äÀÌ ÀÖ´Ù. ´ÜÀ§³ª ÁÂÇ¥ ü°è¸¦ ¹Ù²Ü ¼ö ÀÖ°í È®´ë, Ãà¼Òµµ °¡´ÉÇÏ´Ù. ±×·¯³ª ¸ÊÇÎ ¸ðµå´Â ÁÂÇ¥¿¡ ´ëÇؼ­¸¸ Àû¿ëµÉ »Ó °´Ã¼¿¡ ´ëÇؼ­´Â Àû¿ëµÇÁö ¾Ê±â ¶§¹®¿¡ ½Ç¿ë¼ºÀÌ °ÅÀÇ ¾ø´Ù. ÇѸ¶µð·Î GDI+ÀÇ º¯È¯¿¡ ºñÇØ ±â´ÉÀÌ ¸¹ÀÌ ¶³¾îÁö¸ç °ÔÀÓÀÌ ¾ÈµÈ´Ù. º¯È¯Àº ¼öÇÐÀûÀ¸·Î »ó´çÈ÷ º¹ÀâÇÑ °úÁ¤À» ÅëÇØ °è»êµÇÁö¸¸ Graphics Ŭ·¡½º°¡ Á¦°øÇÏ´Â °í¼öÁØ ÇÔ¼öµéÀ» »ç¿ëÇÏ¸é °£´ÜÇÑ º¯È¯ Á¤µµ´Â ½±°Ô Àû¿ëÇÒ ¼ö ÀÖ´Ù.

 

Status TranslateTransform( REAL dx, REAL dy [,MatrixOrder order]);

Status ScaleTransform( REAL sx, REAL sy [,MatrixOrder order]);

Status RotateTransform( REAL angle [,MatrixOrder order]);

Status ResetTransform(VOID);

 

ÇÔ¼öÀÇ À̸§¸¸ ºÁµµ ¾î¶² Á¾·ùÀÇ º¯È¯À» ÇÏ´ÂÁö ½±°Ô À¯Ãß °¡´ÉÇÏ´Ù. °¢ ÇÔ¼öÀÇ ÀμöµéÀº º¯È¯ÀÇ Á¤µµ³ª °Å¸®¸¦ ÁöÁ¤ÇÏ´Â °ªÀ̸ç MatrixOrderÀμö´Â º¯È¯ ¼ø¼­¸¦ ÁöÁ¤Ç쵂 »ý·« °¡´ÉÇÏ´Ù. ¿¹Á¦¸¦ ¸¸µé¾î °¢ º¯È¯À» Çϳª¾¿ Àû¿ëÇØ º¸ÀÚ. Å°º¸µåÀÇ 1~6±îÁö¸¦ ´­·¯ ¸ðµå¸¦ ¹Ù²Ù¸é µÈ´Ù.

 

¿¹ Á¦ : Transform

TCHAR Mode=TEXT('1');

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

 

     if (Mode == TEXT('1')) {

          // ÆòÇà À̵¿

          G.TranslateTransform(40,50);

     } else if (Mode == TEXT('2')) {

          // È®´ë

          G.ScaleTransform(2,2);

     } else if (Mode == TEXT('3')) {

          // ȸÀü

          G.RotateTransform(-10);

     } else if (Mode == TEXT('4')) {

          // 90µµ ȸÀü

          G.TranslateTransform(0,200);

          G.RotateTransform(-90);

     } else if (Mode == TEXT('5')) {

          // À̵¿ ÈÄ È®´ë

          G.ScaleTransform(2,2);

          G.TranslateTransform(50,50);

     } else if (Mode == TEXT('6')) {

          // È®´ë ÈÄ À̵¿

          G.TranslateTransform(50,50);

          G.ScaleTransform(2,2);

     }

 

     G.DrawRectangle(&Pen(Color(0,0,0),3),30,30,100,50);

     Font F(L"±¼¸²",16,FontStyleRegular,UnitPoint);

     G.DrawString(L"¿ùµå º¯È¯",-1,&F,PointF(30,95),&SolidBrush(Color(0,0,0)));

}

 

(30,30) À§Ä¡¿¡ Æø 100, ³ôÀÌ 50À¸·Î »ç°¢ÇüÀ» Çϳª ±×¸®°í ±× ¾Æ·¡ÂÊ¿¡ 16Æ÷ÀÎÆ®ÀÇ ±¼¸² ÆùÆ®·Î ¹®ÀÚ¿­À» Ãâ·ÂÇß´Ù. ¾Æ¹« º¯È¯µµ ÁöÁ¤ÇÏÁö ¾Ê¾ÒÀ» ¶§ÀÇ Ãâ·ÂÀº ´ÙÀ½°ú °°´Ù.

´ëÃæ ºÁµµ È­¸é»óÀÇ ÁöÁ¤ÇÑ ÁÂÇ¥¿¡ Á¦´ë·Î Ãâ·ÂµÈ °Í °°´Ù. ±×·¯³ª º¯È¯ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é º¯È­°¡ »ý±ä´Ù. ¸ÕÀú ¼öÆò À̵¿À» ÇØ º¸ÀÚ. °¡·Î·Î 40, ¼¼·Î·Î 50¸¸Å­ À̵¿Çϸé Àüü ÁÂÇ¥¿¡ ¼öÆò À̵¿ °Å¸®¸¸Å­ ´õÇØÁø´Ù. ¹°·Ð À½¼ö¸¦ ÁÖ¸é ¿ÞÂÊÀ̳ª À§·Î À̵¿ÇÒ ¼öµµ ÀÖ´Ù. »ç°¢ÇüÀÇ Á»ó´Ü ÁÂÇ¥ÀÎ (30,30)Àº (70,80)ÀÌ µÇ´Âµ¥ ´«´ëÁßÀ¸·Î ºÁµµ ´ëÃæ ÀÌ Á¤µµ À̵¿ÇßÀ½À» ½±°Ô È®ÀÎÇÒ ¼ö ÀÖ´Ù.

ScaleTransform ÇÔ¼ö´Â Àμö·Î ÁÖ¾îÁø sx, sy¸¦ ¸ðµç ÁÂÇ¥¿¡ °öÇÔÀ¸·Î½á È®´ë¸¦ ÇÑ´Ù. ÀμöÀÇ Å¸ÀÔÀÌ ½Ç¼öÀ̹ǷΠ1º¸´Ù ´õ ÀÛÀº °ªÀ» ÁÙ ¼öµµ Àִµ¥ ÀÌ °æ¿ì¿¡´Â Ãà¼ÒµÉ °ÍÀÌ´Ù. 0.5¸¦ ÁÖ¸é Àý¹ÝÀ¸·Î Ãà¼ÒµÈ´Ù. ¿¹Á¦¿¡¼­´Â °¡·Î, ¼¼·Î·Î 2¸¦ ÁÖ¾úÀ¸¹Ç·Î ÀüüÀûÀ¸·Î 2¹è È®´ëµÈ´Ù.

»ç°¢ÇüÀÇ Á»ó´Ü ÁÂÇ¥ (30,30)Àº (60,60)ÀÌ µÇ¸ç ÆøÀº 200ÀÌ µÇ°í ³ôÀÌ´Â 100ÀÌ µÈ´Ù. ¹®ÀÚ¿­ÀÇ ÁÂÇ¥ (30,95)´Â (60,190)ÀÌ µÉ °ÍÀÌ´Ù. ÁÂÇ¥¿Í Å©±â¸¸ Á¶Á¤µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ÆæÀÇ µÎ²²³ª ÆùÆ®ÀÇ ±½±â±îÁöµµ ÀÏ°ýÀûÀ¸·Î È®´ëµÇ¾î ¸¶Ä¡ µ¸º¸±â·Î º¸´Â °Íó·³ µü µÎ ¹è°¡ µÈ´Ù. ±×¸²À» ±×¸° ÈÄ È®´ëÇÏ´Â °ÍÀÌ ¾Æ´Ï°í ÁÂÇ¥, Å©±â, µÎ²² µîÀÇ ¼öÄ¡°ªÀ» È®ÀåÇØ ³õ°í ±×¸®´Â °ÍÀ̹ǷΠ°è´Ü Çö»óÀÌ ¾øÀ¸¸ç Ãâ·Â °á°úµµ ¾ÆÁÖ ¸Å²öÇÏ´Ù.

RotateTransform ÇÔ¼ö´Â ÁÂÇ¥¸¦ ȸÀü½ÃŲ´Ù. Àμö angleÀº 360ºÐ¹ýÀÇ °¢µµÀÌµÇ ¼öÇп¡¼­¿Í´Â ´Þ¸® ½Ã°è ¹æÇâÀ¸·Î °¢µµ°¡ Áõ°¡ÇÑ´Ù. ¿¹Á¦¿¡¼­´Â -10À» ÁÖ¾î ¹Ý½Ã°è ¹æÇâÀ¸·Î 10µµ ȸÀü½ÃÄ×´Ù. º¯È¯ÀÌ ¾Æ´Ï¸é ÀÌ·± ºñ½ºµëÇÑ µµÇüÀ̳ª ¹®ÀÚ¿­À» Ãâ·ÂÇÏ´Â °ÍÀº ¹«Ã´ ¾î·Á¿î ÀÏÀÌ´Ù. ȸÀü¿¡ ÀÇÇØ Á÷¼±ÀÌ »ç¼±ÀÌ µÊÀ¸·Î½á °è´ÜÇö»óÀÌ ½ÉÇØÁ® º¸À̴µ¥ ½º¹«µù ¸ðµå¸¦ º¯°æÇϸé ÈξÀ ´õ ºÎµå·´°Ô Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.

ȸÀüÀÇ Áß½ÉÁ¡Àº ¿ùµå ÁÂÇ¥ÀÇ ¿øÁ¡ÀÎ (0,0)Àε¥ µðÆúÆ® º¯È¯¿¡¼­ ÀÌ ÁÂÇ¥´Â ÀÛ¾÷¿µ¿ª ÁÂÇ¥ÀÇ ¿øÁ¡°ú ÀÏÄ¡ÇϹǷΠÁ»ó´ÜÀ» ±âÁØÀ¸·Î ȸÀüÇÑ´Ù. µû¶ó¼­ ȸÀü °¢µµ°¡ Ŭ °æ¿ì ±×¸²ÀÇ ÀϺΰ¡ ÀÛ¾÷ ¿µ¿ªÀ» ¹þ¾î³¯ ¼öµµ ÀÖÀ¸¹Ç·Î Àû´çÈ÷ ÆòÇà À̵¿µµ ÇØ¾ß ÇÑ´Ù. ¹Ý½Ã°è ¹æÇâÀ¸·Î 90µµ ȸÀüÇÏ¸é ±×¸²ÀÌ È­¸é À§ÂÊÀ¸·Î »ç¶óÁ® ¹ö¸®¹Ç·Î ¼öÁ÷À¸·Î 200¸¸Å­ À̵¿½ÃÄÑ¾ß ÇÑ´Ù.

¿©·¯ °¡Áö º¯È¯À» µ¿½Ã¿¡ ¼öÇàÇÒ ¼öµµ Àִµ¥ º¯È¯ÀÇ °á°ú´Â ´©ÀûµÇ¾î Àû¿ëµÈ´Ù. À̶§ ¾î¶² º¯È¯À» ¸ÕÀú ¼öÇàÇϴ°¡¿¡ µû¶ó ÃÖÁ¾ °á°ú°¡ ´Þ¶óÁö´Âµ¥ º¯È¯ ÇÔ¼öµéÀº Ãâ·Â¹®°ú °¡±î¿î ÂÊ, Áï ÃÖ±ÙÀÇ È£ÃâºÎÅÍ ¸ÕÀú Àû¿ëµÈ´Ù. »ó½Ä°ú´Â ´Þ¸® ÄÚµå»óÀÇ µÚÂÊ¿¡ ÀÖ´Â º¯È¯À» ¸ÕÀú Àû¿ëÇϵµ·Ï µÇ¾î ÀÖ´Ù.

¿¹Á¦¿¡ À̵¿°ú È®´ë¸¦ °°ÀÌ Àû¿ëÇÏ´Â Äڵ尡 µÎ ¹ú ÀÛ¼ºµÇ¾î Àִµ¥ Àμö´Â °°Áö¸¸ º¯È¯ ÇÔ¼ö È£Ãâ ¼ø¼­°¡ ´Ù¸£´Ù. À§ÂÊ ÄÚµå´Â À̵¿À» ¸ÕÀúÇÏ°í È®´ë¸¦ ÇßÀ¸¸ç ¾Æ·¡ÂÊ ÄÚµå´Â È®´ë¸¦ ¸ÕÀúÇÏ°í À̵¿À» ³ªÁß¿¡ Çß´Ù. °¢ °æ¿ìÀÇ ½ÇÇà °á°ú¸¦ º¸¸é È®½ÇÈ÷ ´Ù¸£°Ô ³ªÅ¸³­´Ù.

 

¿Ö ÀÌ·± Â÷ÀÌ°¡ ¹ß»ýÇÏ´ÂÁö ¼öÀÛ¾÷À¸·Î Á÷Á¢ º¯È¯À» ÇØ º¸ÀÚ. °¡·Î, ¼¼·ÎÀÇ Àμö´Â ¸ðµÎ µ¿ÀÏÇϹǷΠ»ç°¢ÇüÀÇ ¿ÞÂÊ ÁÂÇ¥ÀÎ 30ÀÌ ¾î¶»°Ô º¯È¯µÇ´ÂÁö¸¸ º¸¸é µÈ´Ù.

 

À̵¿ÈÄ È®´ë : (30 + 50) * 2 = 160

È®´ëÈÄ À̵¿ : 30 * 2 + 50 = 110

 

À̵¿À» ¸ÕÀú Çϸé 50ÀÌ ´õÇØÁøÈÄ °öÇØÁö¹Ç·Î °á°ú°ªÀº 160ÀÌ µÈ´Ù. ¹Ý¸é È®´ë¸¦ ¸ÕÀú Çϸé 2¸¦ °öÇÑ ÈÄ 50À» ´õÇϹǷΠ°á°ú°ªÀº 110ÀÌ µÈ´Ù. ÃÖÁ¾ Ãâ·ÂµÈ ±×¸²ÀÇ Å©±â´Â °°Áö¸¸ ÁÂÇ¥°¡ ´Ù¸£´Ù. ÀÌ Â÷ÀÌ°¡ ¹ß»ýÇÑ ¿øÀÎÀ» ¼öÇÐÀûÀ¸·Î ¼³¸íÇÏÀÚ¸é µ¡¼À°ú °ö¼ÀÀÇ ±³È¯ ¹ýÄ¢ÀÌ ¼º¸³ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. °öÇϱ⸦ ¸ÕÀú ÇÏ´À³Ä ´õÇϱ⸦ ¸ÕÀú ÇÏ´À³Ä¿¡ µû¶ó °á°ú°¡ ´Þ¶óÁö´Â °ÍÀº Áö±ØÈ÷ ½Ì½ÄÀûÀÌ´Ù.

µÎ °¡Áö º¯È¯¸¸ Á¶ÇÕÇØ ºÃ´Âµ¥ ¼¼ °¡Áö ÀÌ»óÀÇ º¯È¯À» Àû¿ëÇصµ ¸¶Âù°¡Áö ¿ø¸®°¡ Àû¿ëµÈ´Ù. ¿©·¯ °¡Áö º¯È¯À» µ¿½Ã¿¡ ¼öÇàÇÒ ¶§´Â °á°ú¸¦ ¿¹ÃøÇϱ⠾î·Á¿ì¹Ç·Î ÁÖÀÇÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. º¯È¯ ¼ø¼­´Â ÇÔ¼öÀÇ È£Ãâ ¼ø¼­·Î °áÁ¤µÇ¹Ç·Î ¸ÕÀú Àû¿ëÇÏ°íÀÚ ÇÏ´Â º¯È¯À» ³ªÁß¿¡ ÇÏ¸é µÈ´Ù. °¢ º¯È¯ ÇÔ¼öÀÇ ¸¶Áö¸· Àμö MatrixOrder Àμö¸¦ ÁöÁ¤Çϸé È£Ãâ ¼ø¼­¿Í »ó°ü¾øÀÌ ¼ø¼­¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.

ÀÌ Àμö´Â º¯È¯½ÄÀÇ ¿¬»ê ¼ø¼­¸¦ ÁöÁ¤Çϴµ¥ MatrixOrderPrepend·Î ÁöÁ¤ÇÏ¸é ¸ÕÀú ¼öÇàµÇ°í MatrixOrderAppend·Î ÁöÁ¤ÇÏ¸é ³ªÁß¿¡ ¼öÇàµÈ´Ù. ÀÌ Àμö »ý·«½Ã µðÆúÆ®ÀÎ MatrixOrderPrepend°¡ Àû¿ëµÇ¹Ç·Î È£Ãâ ¼ø¼­ÀÇ ¿ª¼øÀ¸·Î Àû¿ëµÇ´Â °ÍÀÌ´Ù. ÇÔ¼ö È£Ãâ ¼ø¼­¸¸À¸·Î´Â º¯È¯ ¼ø¼­¸¦ ÅëÁ¦Çϱ⠾î·Á¿î °æ¿ì°¡ Àִµ¥ º¯È¯À» ¹Ù²ã °¡¸ç µµÇüÀ» ±×¸± ¶§ÀÌ´Ù. º¯È¯Àº ÇÊ¿ä¿¡ µû¶ó ¾ðÁ¦µçÁö ¹Ù²Ü ¼ö ÀÖ´Ù. Áï, 2¹è È®´ëÇؼ­ ³×¸ð ±×¸®°í Àý¹ÝÀ¸·Î Ãà¼ÒÇؼ­ Ÿ¿øÀ» ±×¸®´Â °Íµµ °¡´ÉÇÏ´Ù.

 

È®´ë º¯È¯

À̵¿ º¯È¯

»ç°¢Çü ±×¸²                // À̵¿ ÈÄ È®´ë

ȸÀü º¯È¯

Ÿ¿ø ±×¸²                    // ȸÀü, À̵¿, È®´ë º¯È¯

 

»ç°¢ÇüÀº À̵¿ ÈÄ È®´ëµÉ °ÍÀÌ´Ù. Ÿ¿øÀº ¾ÕÂÊ º¯È¯±îÁö ´©Àû Àû¿ëµÇ¹Ç·Î ȸÀü, À̵¿, È®´ë º¯È¯ÀÌ ¼ø¼­´ë·Î Àû¿ëµÈ´Ù. ¸¸¾à Ÿ¿øÀ» À̵¿, È®´ë, ȸÀü ¼øÀ¸·Î Àû¿ëÇÏ°í ½Í´Ù¸é ȸÀü º¯È¯ÀÌ °¡Àå ³ªÁß¿¡ ÀϾµµ·Ï ÇØ¾ß ÇÑ´Ù. ±×·¸´Ù°í ȸÀü º¯È¯À» ¾ÕÂÊÀ¸·Î ¿Å±â¸é »ç°¢Çüµµ ÀÌ ¿µÇâÀ» ¹Þ°Ô µÉ °ÍÀÌ´Ù. À̶§ ȸÀü º¯È¯ÀÇ ¼ø¼­¸¦ MatrixOrderAppend·Î ÁöÁ¤ÇÏ¸é ¿øÇϴ´ë·Î µÈ´Ù. º¯È¯À» ÇØÁ¦ÇÒ ¶§´Â ResetTransform ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ¸ðµç º¯È¯À» ¹«È¿È­½ÃÅ°¹Ç·Î º°µµÀÇ Àμö´Â ¾ø´Ù.

³ª.Çà·Ä º¯È¯

¾Õ Ç׿¡¼­´Â GraphicsÀÇ ¸â¹ö ÇÔ¼öµé·Î º¯È¯À» ¼öÇàÇØ ºÃ´Âµ¥ °í¼öÁØÀÌ¶ó ¾²±â´Â ÆíÇÏÁö¸¸ °£´ÜÇÑ º¯È¯¸¸ ÇÒ ¼ö ÀÖ¾î º¯È¯ÀÇ ÁøÁ¤ÇÑ ¹¦¹Ì¸¦ ´À³¢±â¿¡´Â ºÎÁ·ÇÏ´Ù. ¿ùµå º¯È¯Àº ³»ºÎÀûÀ¸·Î Çà·Ä ¿¬»êÀ» ÅëÇØ ±¸ÇöµÇ´Âµ¥ ¿©±â¼­´Â º¯È¯ÀÇ ¼öÇÐÀû ÀÌ·ÐÀ» °øºÎÇØ º¸°í Á» ´õ ÀÚÀ¯·Î¿î º¯È¯À» ½ÃµµÇØ º¸ÀÚ. º¯È¯¿¡ »ç¿ëµÇ´Â Çà·ÄÀº Matrix Ŭ·¡½º·Î Ç¥ÇöµÈ´Ù. Matrix Ŭ·¡½º´Â ´ÙÀ½ »ý¼ºÀÚ·Î »ý¼ºÇϸç 2*3 Çà·Ä ¿ä¼Ò¸¦ Àμö·Î Àü´ÞÇÑ´Ù.

 

Matrix( REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy );

 

½ÇÇàÁß¿¡ ¿ø¼Ò°ªÀ» ¹Ù²ã °¡¸ç ¾²°í ½ÍÀ» ¶§´Â µðÆúÆ® »ý¼ºÀÚ·Î »ý¼ºÇÑ ÈÄ SetElements ÇÔ¼ö·Î ¿ø¼ÒÀÇ °ªÀ» º¯°æÇÑ´Ù. ÀϺΠ¿ø¼Ò¸¸ ¹Ù²Ù°í ½ÍÀ» ¶§´Â GetÀ¸·Î ¸ÕÀú Á¶»çÇÑ ÈÄ Æ¯Á¤ ¿ø¼Ò¸¸ ¹Ù²Ù¾î SetÇÏ¸é µÉ °ÍÀÌ´Ù.

 

Matrix(VOID);

Status GetElements(REAL *m) const;

Status SetElements(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy);

 

º¯È¯ Çà·Ä ÀÚü´Â 3*3 Çà·Ä·Î µÇ¾î ÀÖÁö¸¸ 3¿­ÀÌ °íÁ¤°ªÀ» °¡Áö±â ¶§¹®¿¡ ½ÇÁ¦ ÇÊ¿äÇÑ °ªÀº 6°³ »ÓÀÌ´Ù. ÀÌ 6°³ÀÇ ¿ø¼ÒµéÀ» ¾î¶»°Ô Á¤ÀÇÇϴ°¡¿¡ µû¶ó ´Ù¾çÇÑ º¯È¯ È¿°ú°¡ ³ªÅ¸³­´Ù. ÀÌ Çà·ÄÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵȴÙ.

3¿­Àº 0, 0, 1·Î °ªÀÌ °íÁ¤µÇ¾î ÀÖ´Ù. ¿ùµå ÁÂÇ¥ (x, y)¿¡ ÀÌ Çà·ÄÀ» °öÇϸé ÆäÀÌÁö ÁÂÇ¥ (x', y')°¡ °è»êµÈ´Ù.

1Çà 3¿­ÀÇ ¿ùµå ÁÂÇ¥ Çà·Ä¿¡ 3Çà 3¿­ÀÇ Matrix °´Ã¼¸¦ °öÇϸé 1Çà 3¿­ÀÇ ÆäÀÌÁö ÁÂÇ¥°¡ °è»êµÈ´Ù. °¢ Çà·ÄÀÇ Á¦ÀÏ ³¡¿­Àº °è»êÀ» µµ¿ÍÁÖ´Â ´õ¹Ì°ªÀÌ´Ù. ÀÌ Çà·Ä½ÄÀ» ´ÙÇ×½ÄÀ¸·Î Á¤¸®ÇÏ¸é ´ÙÀ½ °ø½ÄÀÌ µµÃâµÈ´Ù.

 

x' = x * m11 + y * m21 + dx;

y' = x * m12 + y* m22 + dx;

1 = 1

 

ÆäÀÌÁö ÁÂÇ¥ (x', y')¸¦ °áÁ¤Çϴµ¥ ¿ùµå ÁÂÇ¥¿Í °¢ Çà·ÄÀÇ ¿ä¼Ò°¡ °öÇØÁö°í ´õÇØÁüÀ¸·Î½á º¯È¯ÀÌ ¹ß»ýÇÏ´Â °ÍÀÌ´Ù. MatrixÀÇ µðÆúÆ® »ý¼ºÀÚ´Â ´ë°¢¼± ¹æÇ⸸ 1ÀÎ ´ÜÀ§ Çà·ÄÀ» »ý¼ºÇÑ´Ù.

ÀÌ Çà·Ä½ÄÀ» À§ ´ÙÇ׽Ŀ¡ Àû¿ëÇØ º¸¸é x' = x, y' = y°¡ µÇ¾î ¾Æ¹«·± º¯È¯ÀÌ ¹ß»ýÇÏÁö ¾Ê°í ¿ùµå ÁÂÇ¥°¡ ±×´ë·Î ÆäÀÌÁö ÁÂÇ¥°¡ µÈ´Ù. ±×·¡¼­ µðÆúÆ® º¯È¯ÀÌ »ó¼ö º¯È¯À¸·Î Á¤ÀǵǾî ÀÖ´Â °ÍÀÌ´Ù. ¸¸¾à Çà·Ä ¿ä¼Ò Áß Çϳª¶óµµ º¯°æµÇ¸é À̶§ºÎÅÍ´Â º¯È¯ÀÌ ¹ß»ýÇÑ´Ù. Çà·ÄÀ» Á¤ÀÇÇÑ ÈÄ GraphicsÀÇ ´ÙÀ½ ÇÔ¼ö·Î º¯È¯¿¡ »ç¿ëÇÒ Çà·Ä °´Ã¼¸¦ ÁöÁ¤ÇÑ´Ù.

 

Status SetTransform( const Matrix *matrix );

 

Çà·Ä °´Ã¼°¡ ÁöÁ¤µÇ¸é ÀÌÈĺÎÅÍ ¸ðµç ÁÂÇ¥¿¡ ´ëÇØ ÀÌ Çà·ÄÀÌ °öÇØÁø´Ù. Çà·ÄÀÇ ¿ä¼Ò¿¡ µû¶ó ¾î¶² º¯È¯ÀÌ ¹ß»ýÇÏ´ÂÁö ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.

 

¿¹ Á¦ : MatrixTransform

#include <math.h>

TCHAR Mode=TEXT('1');

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

     Matrix M;

 

     if (Mode == TEXT('1')) {

          // ÆòÇà À̵¿

          M.SetElements(1,0,0,1,50,50);

     } else if (Mode == TEXT('2')) {

          // È®´ë

          M.SetElements(2,0,0,2,0,0);

     } else if (Mode == TEXT('3')) {

          // ȸÀü

          double rad;

          rad=-10*3.14/180;

          M.SetElements((REAL)cos(rad),(REAL)sin(rad),-(REAL)sin(rad),(REAL)cos(rad),0,0);

     } else if (Mode == TEXT('4')) {

          // ±â¿ïÀ̱â

          M.SetElements(1,0,1,1,0,0);

     } else if (Mode == TEXT('5')) {

          // ¼öÆò µÚÁý±â

          M.SetElements(-1,0,0,1,200,0);

     } else if (Mode == TEXT('6')) {

          // ¼öÁ÷ µÚÁý±â

          M.SetElements(1,0,0,-1,0,150);

     } else if (Mode == TEXT('7')) {

          // ºÒ°¡´ÉÇÑ º¯È¯

          M.SetElements(2,0,0,0,0,0);

     }

 

     G.SetTransform(&M);

 

     G.DrawRectangle(&Pen(Color(0,0,0),3),30,30,100,50);

     Font F(L"±¼¸²",16,FontStyleRegular,UnitPoint);

     G.DrawString(L"Çà·Ä º¯È¯",-1,&F,PointF(30,95),&SolidBrush(Color(0,0,0)));

}

 

Ãâ·Â µµÇüÀº ¾Õ ¿¹Á¦¿Í µ¿ÀÏÇÏ´Ù. ¸ÕÀú ÆòÇà À̵¿À» ÇØ º¸ÀÚ. ´ÜÀ§ Çà·Ä¿¡ dx, dy¸¸ 50À¸·Î ¼öÁ¤µÈ Çà·ÄÀ» °öÇß´Ù.

ÀÌ Çà·Ä½ÄÀ» Àü°³ÇÏ¸é ´ÙÀ½ µÎ °³ÀÇ °ø½ÄÀÌ ¸¸µé¾îÁø´Ù.

 

x' = x + 50

y' = y + 50

 

¿ùµå ÁÂÇ¥ÀÇ x, y¿¡ °¢°¢ 50¾¿À» ´õÇßÀ¸¹Ç·Î ÆäÀÌÁö ÁÂÇ¥°¡ 50Çȼ¿¸¸Å­ ÆòÇà À̵¿ÇÑ´Ù. MatrixÀÇ dx, dy´Â ¼öÆò, ¼öÁ÷À¸·ÎÀÇ À̵¿ °Å¸®¸¦ ÁöÁ¤ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ½ÇÇà °á°ú´Â ¾Õ ¿¹Á¦¿Í µ¿ÀÏÇÏ´Ù. È®´ëÀÇ °æ¿ìµµ ºñ½ÁÇÑ ÀýÂ÷¸¦ °ÅÃÄ ´ÙÇ×½ÄÀ» µµÃâÇØ º¸¸é ¿ø¸®¸¦ ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Ù.

 

x' = 2 * x

y' = 2 * y

 

¿ø·¡ ÁÂÇ¥¿¡ 2¸¦ °öÇßÀ¸¹Ç·Î È®´ëµÇ´Â °ÍÀÌ´Ù. MatrixÀÇ m11, m22 ¿ø¼Ò´Â °¢°¢ ¼öÆò È®´ë ¹èÀ², ¼öÁ÷ È®´ë ¹èÀ²À» ÁöÁ¤ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ȸÀüÀÇ °æ¿ì´Â ¼±Çü º¯È¯ÀÌ ¾Æ´Ï¶ó Á¶±Ý º¹ÀâÇѵ¥ ±×·¸´Ù°í ´ë´ÜÈ÷ ¾î·Á¿î °Íµµ ¾Æ´Ï´Ù. ¾î·ÃÈ÷ ¾Ë¾Æ¼­ ÀÛ¼ºÇß°Ú°Å´Ï »ý°¢ÇÏ¸é µÈ´Ù. ´ÙÀ½Àº ±â¿ïÀ̱⸦ ÇØ º¸ÀÚ. ±â¿ïÀ̱â´Â °í¼öÁØ ÇÔ¼ö·Î´Â Á¦°øµÇÁö ¾ÊÀ¸¹Ç·Î Çà·Ä·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù. Çà·ÄÀ» °öÇØ º¸¸é ´ÙÀ½ °ø½ÄÀÌ ¸¸µé¾îÁø´Ù.

 

x' = x + y

y' = y;

 

y'´Â ¿ø·¡ÀÇ ¿ùµå ÁÂÇ¥¸¦ ±×´ë·Î »ç¿ëÇÏ°í x'¿¡´Â x¿¡ y¸¦ ´õÇÔÀ¸·Î½á ¾Æ·¡ÂÊÀ¸·Î ³»·Á°¥¼ö·Ï x°¡ ¿ø·¡°ªº¸´Ù ´õ Ä¿Áø´Ù. ±×·¡¼­ ±×¸²ÀÌ ÀüüÀûÀ¸·Î ¿ìÇÏÇâÀ¸·Î ±â¿ï¾îÁø´Ù. Çà·ÄÀÇ ¼¼¹ø° ¿ø¼ÒÀÎ m21Àº ±â¿ï¾îÁö´Â Á¤µµ¸¦ ÁöÁ¤Çϸç m12¸¦ Á¶ÀÛÇÏ¸é ¼öÁ÷À¸·Î ±â¿ï¾îÁö´Â È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù.

µÚÁý±â´Â È®´ëÀÇ ¶Ç ´Ù¸¥ ¿¹¶ó°í ÇÒ ¼ö Àִµ¥ È®´ë ¹èÀ²·Î À½¼ö¸¦ ÁÜÀ¸·Î½á ¹Ý»çµÈ ¸ð¾çÀ» ¸¸µç´Ù. x' = -x°¡ µÇ¾î ÀÛ¾÷ ¿µ¿ªÀÇ ¿ÞÂÊÀ¸·Î ±×¸²À» ¹Ý»ç½ÃŲ´Ù. ´Ü, ÀÌ·¸°Ô µÇ¸é À½¼ö ÁÂÇ¥·Î À̵¿ÇÏ¿© º¸ÀÌÁö ¾ÊÀ¸¹Ç·Î Àû´çÈ÷ ÆòÇà À̵¿ÇÏ¿© ÀÛ¾÷¿µ¿ª ¾ÈÂÊÀ¸·Î µé¾î¿Àµµ·Ï Á¶Á¤ÇØ¾ß ÇÑ´Ù. ¼öÆòÀ¸·Î µÚÁýÀ» ¶§´Â 200¸¸Å­ ¿À¸¥ÂÊÀ¸·Î À̵¿½ÃÄ×°í ¼öÁ÷À¸·Î µÚÁýÀ» ¶§´Â 150¸¸Å­ ¾Æ·¡·Î À̵¿Çß´Ù. ¼öÆò°ú ¼öÁ÷À¸·Î µ¿½Ã¿¡ µÚÁý´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù.

 

°íÀÛ ¿©¼¸°³¹Û¿¡ ¾ÈµÇÁö¸¸ Çà·ÄÀÇ ¿ø¼ÒµéÀ» ¾î¶»°Ô Á¶ÇÕÇϴ°¡¿¡ µû¶ó ±²ÀåÈ÷ ´Ù¾çÇÑ È¿°ú°¡ ¹ß»ýÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ¼öÇÐÀûÀÎ ÀÌÇظ¸ ÃæºÐÇÏ´Ù¸é Çà·ÄÀ» Á¶ÀÛÇÏ¿© ¿©·¯ °¡Áö º¹ÀâÇÑ º¯È¯À» ½ÃµµÇØ º¼ ¼ö ÀÖ´Ù. ±×·¯³ª ¾Æ¹« Á¶ÇÕÀ̳ª ´Ù µÇ´Â °ÍÀº ¾Æ´Ï´Ù. ´ÙÀ½ Çà·ÄÀ» º¸ÀÚ.

 

M.SetElements(2,0,0,0,0,0);

 

ÀÌ Çà·ÄÀ» ´ÙÇ×½ÄÀ¸·Î ¹Ù²Ù¾î º¸¸é x' = 2 * x°¡ µÇ¾î ¼öÆòÀ¸·Î´Â 2¹è È®´ëµÇÁö¸¸ y' = 0 * y°¡ µÇ¾î ¼öÁ÷ ÁÂÇ¥´Â ¹«Á¶°Ç 0ÀÌ µÇ¾î ¹ö¸°´Ù. ÀÌ·¸°Ô µÇ¸é ¸ðµç Ãâ·Â¹®ÀÇ ¼öÁ÷ ÁÂÇ¥´Â 0ÀÌ µÇ¾î ÀÛ¾÷¿µ¿ª À§ÂÊ¿¡ ´Þ¶ó ºÙ¾î ¹ö¸²À¸·Î½á ¾Æ¹« °Íµµ È­¸é¿¡ ³ª¿ÀÁö ¾ÊÀ» °ÍÀÌ´Ù. 0¹è È®´ëÇÑ´Ù´Â °ÍÀº ¼öÇÐÀûÀ¸·Î´Â °¡´ÂÇÏÁö¸¸ ½ÇÁúÀûÀ¸·Î´Â Àǹ̰¡ ¾ø´Ù. ±×·¡¼­ ÀÌ·± ¹«ÀǹÌÇÑ º¯È¯Àº ¹«½ÃµÈ´Ù.

Çà·ÄÀÇ ¿ø¼ÒµéÀ» Á÷Á¢ ¸¸µå´Â °ÍÀÌ ¹ø°Å·Ó´Ù¸é MatrixÀÇ ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© µ¿ÀÏÇÑ È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀº º¯È¯°ªÀ» ¹Þ¾Æ Çà·Ä ¿ø¼ÒµéÀ» »ý¼ºÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÚÁÖ »ç¿ëÇÏ´Â º¯È¯¿¡ ´ëÇؼ­´Â ÀÌ ÇÔ¼öµéÀ» »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù.

 

Status Translate( REAL offsetX, REAL offsetY, REAL order);

Status Scale( REAL scaleX, REAL scaleY, MatrixOrder order);

Status Rotate( REAL angle, MatrixOrder order);

Status Shear(REAL shearX, REAL shearY, REAL order);

Status RotateAt( REAL angle, const PointF &center, MatrixOrder order);

 

ÀÌ ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© º¯È¯ÇØ º¸ÀÚ.

 

¿¹ Á¦ : MatrixMethod

#include <math.h>

int Mode=0;

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

 

     Matrix M;

 

     switch (Mode) {

 

          break;

     }

 

     G.SetTransform(&M);

 

     G.DrawRectangle(&Pen(Color(0,0,0),3),30,30,100,50);

     Font F(L"±¼¸²",16,FontStyleRegular,UnitPoint);

     G.DrawString(L"Çà·Ä º¯È¯",-1,&F,PointF(30,95),&SolidBrush(Color(0,0,0)));

}

 

È®´ë, ȸÀü, ±â¿ïÀ̱â, µÚÁý±â±îÁö´Â ¾Õ ¿¹Á¦¿Í µ¿ÀÏÇÏ´Ù. ±×·¯³ª ȸÀü Áß½ÉÁ¡ ÁöÁ¤Çϱâ´Â ¾Õ ¿¹Á¦¿¡´Â ¾ø´ø ±â´ÉÀÌ´Ù. ´Ü¼ø ȸÀüÀº Ç×»ó ÀÛ¾÷¿µ¿ª ¿øÁ¡À» ±âÁØÀ¸·Î Çϴµ¥ ºñÇØ È¸Àü Áß½ÉÁ¡À» ÁöÁ¤ÇÏ¸é ¿øÇÏ´Â °÷À» Áß½ÉÀ¸·Î ȸÀüÇÒ ¼ö ÀÖ´Ù.

º¹ÇÕ º¯È¯À¸·Îµµ µ¿ÀÏÇÑ È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù. ´ÙÀ½ Ç׿¡¼­ »ó¼¼ÇÏ°Ô ¿¬±¸ÇØ º¸ÀÚ. Matrix¿¡´Â Çà·ÄÀ» °ü¸®ÇÏ´Â ¸Þ¼Òµåµµ Á¦°øµÈ´Ù.

 

Matrix *Clone(VOID);

static BOOL Equals(const Matrix* matrix);

BOOL IsIdentity(VOID);

BOOL IsInvertible(VOID);

Status Invert(VOID);

Status Multiply(const Matrix *matrix, MatrixOrder order);

REAL OffsetX(VOID);

REAL OffsetY(VOID);

 

»çº» Çà·Ä ¸¸µé±â, °°Àº Çà·ÄÀÎÁö ºñ±³Çϱâ, ´ÜÀ§ Çà·ÄÀÎÁö °Ë»çÇϱâ, ¿ªÇà·Ä ±¸Çϱâ, Çà·Ä °öÇϱ⠵îÀÇ ¼öÇÐÀû ¿¬»êÀ» ¼öÇàÇÏ´Â ÇÔ¼öµéÀÌ´Ù. ´ÙÀ½ µÎ ÇÔ¼ö´Â Á¡°ú º¤ÅÍ¿¡ Á÷Á¢ Çà·ÄÀ» °öÇÑ´Ù.

 

Status TransformPoints(PointF *pts [,INT count]);

Status TransformVectors(PointF *pts [,INT count]);

 

Á¡ÀÇ ¹è¿­°ú °³¼ö¸¦ ÁÖ¸é °¢ Á¡À» 1ÇàÀÇ Çà·Ä·Î º¸°í Çà·ÄÀ» °öÇÑ´Ù. pts´Â ÀÔÃâ·Â¿ë ÀμöÀÌ¸ç º¯È¯ ´ë»ó Á¡ÀÇ ¹è¿­À» ³Ñ±â¸é º¯È¯µÈ °ªÀ¸·Î ¹Ù²ï´Ù. °³¼ö´Â ¹è¿­ÀÇ Å©±âÀÌµÇ ¿ø¼Ò°¡ Çϳª »ÓÀÏ ¶§´Â »ý·« °¡´ÉÇÏ´Ù. ¼±¶æ ÀÌÇØ°¡ Àß ¾ÈµÇ´Â ÇÔ¼öÀε¥ ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.

 

¿¹ Á¦ : TransformPoint

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

 

     // ¿øº» µµÇü

     PointF pts[]={PointF(10,100),PointF(50,10),PointF(100,150),PointF(200,100)};

     G.DrawCurve(&Pen(Color(0,0,0),3),pts,4,0.5);

 

     // 2¹è È®´ë ¹× À̵¿

     Matrix M(2.0,0.0,0.0,2.0,100.0,100.0);

     M.TransformPoints(pts,4);

     //M.TransformVectors(pts,4);

     G.DrawCurve(&Pen(Color(0,0,255),3),pts,4,0.5);

 

     // GDI·Î ÅؽºÆ® Ãâ·Â

     TextOut(hdc,(int)pts[3].X, (int)pts[3].Y, TEXT("End"),3);

}

 

Ä«µð³Î °î¼±À» µÎ ¹ø ±×·È´Âµ¥ ÇѹøÀº ¿øº» ÁÂÇ¥¿¡ ÇѹøÀº È®´ë ¹× À̵¿ÇÑ ÁÂÇ¥¿¡ ±×¸° °ÍÀÌ´Ù. pts¿¡´Â Ä«µð³Î °î¼±ÀÇ °¢ Á¡ÀÌ ÀúÀåµÇ¾î ÀÖÀ¸¸ç ÀÌ Á¡µéÀ» ¿¬°áÇÏ´Â Àå·Â 0.5ÀÇ Ä«µð³Î °î¼±À» °ËÁ¤»öÀ¸·Î ±×·È´Ù. ±×¸®°í 2¹è È®´ë ¹× ¼öÆò, ¼öÁ÷À¸·Î 100¸¸Å­ À̵¿ÇÏ´Â Çà·Ä MÀ» Á¤ÀÇÇÑ ÈÄ pts ¹è¿­¿¡ °öÇß´Ù. ±× °á°ú·Î ¸¸µé¾îÁø ÁÂÇ¥¿¡ ÆĶõ»öÀ¸·Î Ä«µð³Î °î¼±À» ´Ù½Ã ±×·Á º¸¾Ò´Ù. Á¤È®ÇÏ°Ô 2¹è È®´ë µÇ¾úÀ¸¸ç 100¸¸Å­ ¼öÆò, ¼öÁ÷À¸·Î À̵¿Çß´Ù.

´ÙÀ½Àº º¤ÅÍÀÇ °æ¿ì¸¦ º¸ÀÚ. º¤ÅÍ´Â ÁÂÇ¥¿Í´Â ´Þ¸® ¹æÇâ°ú ±æÀÌÀÇ ¼ºÁúÀ» °¡ÁöÁö¸¸ À§Ä¡¿¡ ´ëÇÑ Á¤º¸´Â °¡ÁöÁö ¾Ê´Â °³³äÀÌ´Ù. ±×·¡¼­ º¤ÅÍ¿Í Çà·ÄÀ» °öÇϸé È®´ë, Ãà¼Ò´Â ¹ß»ýÇÏÁö¸¸ À̵¿Àº ¹ß»ýÇÏÁö ¾Ê´Â´Ù. º¤ÅÍ¿Í Çà·ÄÀ» °öÇϸé Çà·ÄÀÇ Á¦ 3Çà, Áï dx, dy°ú ¹«½ÃµÈ´Ù. ½ÇÇàÇØ º¸¸é È®´ë¸¸ µÉ »Ó À̵¿Àº µÇÁö ¾Ê´Â´Ù.

±×·¸´Ù¸é ÀÌ µÎ ÇÔ¼ö´Â °ú¿¬ ¾ðÁ¦ ¾²´Â °ÍÀϱî? Ä«µð³Î °î¼±À» 2¹è È®´ëÇÏ°í 100¸¸Å­ À̵¿½ÃÅ°°í ½Í´Ù¸é ScaleTransform, TranslateTransform µîÀÇ ÇÔ¼ö·Î º¯È¯À» ÁöÁ¤Çصµ µ¿ÀÏÇÑ È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ÀÌ µÎ ¹æ¹ýÀº È¿°ú´Â °°¾Æµµ °úÁ¤ÀÌ ´Ù¸£´Ù. º¯È¯À» Àû¿ëÇÏ¸é  ÇÔ¼ö·Î Àü´ÞµÇ´Â ÁÂÇ¥¸¦ ¾Ë¾Æ¼­ ¹Ù²ã¼­ ¾²Áö¸¸ ÁÂÇ¥¿Í Çà·ÄÀ» Á÷Á¢ °öÇÏ¸é º¯°æµÈ ÁÂÇ¥°ªÀ» ¾Ë ¼ö ÀÖ´Ù. ºñÀ¯ÇÏÀÚ¸é º¯È¯ ÇÔ¼ö´Â ÀÚµ¿ º¯È¯ÀÌ°í À§ ¿¹Á¦ÀÇ ¹æ½ÄÀº ¼öµ¿ º¯È¯ÀÌ´Ù.

¸ðµç Ãâ·ÂÀ» GDI+·Î¸¸ ÇÑ´Ù¸é »ç½Ç ±»ÀÌ ÁÂÇ¥¸¦ Á÷Á¢ º¯È¯ÇÒ ÇÊ¿ä°¡ ¾øÀ» °ÍÀÌ´Ù. ±×·¯³ª º¯È¯ÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù¸é À̶§´Â º¯È¯µÈ ÁÂÇ¥°ªÀ» Á÷Á¢ Á¶»çÇØ¾ß ÇÑ´Ù. °í¼º´ÉÀÇ ±×·¡ÇÈ ¶óÀ̺귯¸®µéÀÌ ¸ðµÎ GDI+¸¦ Áö¿øÇÏ´Â °ÍÀº ¾Æ´Ï¹Ç·Î ÀÌ ¶óÀ̺귯¸®¸¦ ²À ¾²°í ½Í´Ù¸é ¿ùµå º¯È¯À» Á÷Á¢ ¼öÇàÇØ¾ß ÇÑ´Ù. ¿¹Á¦ÀÇ ¸¶Áö¸· ÁÙ¿¡ TextOutÀ¸·Î °î¼±ÀÇ ³¡¿¡ ¹®ÀÚ¿­À» Ãâ·ÂÇÏ´Â Äڵ尡 Àִµ¥ TextOutÀº º¯È¯ÀÇ ¿µÇâÀ» ¹ÞÁö ¾ÊÀ¸¹Ç·Î º¯È¯µÈ °á°ú ÁÂÇ¥¸¦ ÁÖ¾î¾ß ÇÑ´Ù. ±×·¡¼­ ÀÚµ¿ º¯È¯ÀÌ ¾Æ´Ñ ¼öµ¿ º¯È¯ÀÌ ÇÊ¿äÇÑ °ÍÀÌ´Ù.

¼öµ¿ º¯È¯ÀÌ ÇÊ¿äÇÑ ´ëÇ¥ÀûÀÎ ¿¹´Â ¹Ù·Î ¿ªº¯È¯ÀÌ´Ù. ±×·¡ÇÈ ¸Þ¼Òµå·Î Àü´ÞµÇ´Â ¿ùµå ÁÂÇ¥´Â GDI+¿¡ ÀÇÇØ ÆäÀÌÁö ÁÂÇ¥¸¦ °ÅÃÄ ÀåÄ¡ ÁÂÇ¥·Î º¯È¯µÇ¾î ¸ð´ÏÅÍ¿¡ ³ªÅ¸³­´Ù. À̶§ º¯È¯ °ø½ÄÀÌ Àû¿ëµÈ´Ù. ±×·¸´Ù¸é ¹Ý´ëÀÇ °æ¿ì´Â ¿ªº¯È¯À» ÇØ¾ß ÀåÄ¡ ÁÂÇ¥·ÎºÎÅÍ ¿ùµå ÁÂÇ¥¸¦ ±¸ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

¿¹ Á¦ : InverseTransform

Rect Nemo(10,10,50,50);

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

 

     Matrix M;

     M.Translate(50,50);

     M.Scale(2,2);

     G.SetTransform(&M);

     G.DrawRectangle(&Pen(Color(0,0,0),3),Nemo);

}

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     HDC hdc;

     PAINTSTRUCT ps;

 

     switch(iMessage) {

     case WM_LBUTTONDOWN:

          {

              Point pt(LOWORD(lParam),HIWORD(lParam));

              Matrix M;

              M.Translate(50,50);

              M.Scale(2,2);

              M.Invert();

              M.TransformPoints(&pt);

              if (Nemo.Contains(pt)) {

                   MessageBeep(0);

              }

          }

          return 0;

     case WM_CREATE:

          hWndMain=hWnd;

          return 0;

     case WM_PAINT:

          hdc=BeginPaint(hWnd, &ps);

          OnPaint(hdc);

          EndPaint(hWnd, &ps);

          return 0;

     case WM_DESTROY:

          PostQuitMessage(0);

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

Nemo¶ó´Â »ç°¢ÇüÀÇ °´Ã¼¸¦ È­¸é¿¡ Ãâ·ÂÇ쵂 2¹è È®´ëÇÏ°í 50,50 ÆòÇà À̵¿ÇÏ´Â º¯È¯À» Àû¿ëÇß´Ù. NemoÀÇ ¿ùµå ÁÂÇ¥°¡ (10,10)¿¡¼­ Æø, ³ôÀÌ°¡ 50À̹ǷΠ¾Ï»ê¿¡ ÀÇÇØ 60,60¿¡ Æø, ³ôÀÌ 100À¸·Î Ãâ·ÂµÉ °ÍÀÓÀº ½±°Ô ¾Ë ¼ö ÀÖ´Ù.

ÀÌ »óÅ¿¡¼­ ¸¶¿ì½º·Î »ç°¢Çü ¾ÈÂÊÀ» Ŭ¸¯Çß´ÂÁö ¾Ë°í ½Í´Ù¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î. »ç°¢Çü ¾ÈÂÊÀ» Ŭ¸¯ÇßÀ» ¶§ »àÇÏ´Â ¼Ò¸®¸¦ ³»°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÏ¸é µÉ °Í °°´Ù.

 

Point pt(LOWORD(lParam),HIWORD(lParam));

if (Nemo.Contains(pt)) {

     MessageBeep(0);

}

 

±×·¯³ª ¸¶¿ì½º Ŭ¸¯ ¸Þ½ÃÁöÀÎ WM_LBUTTONDOWNÀ¸·Î Àü´ÞµÇ´Â ÁÂÇ¥´Â È­¸é»óÀÇ Çȼ¿ ÁÂÇ¥ÀÌÁö ¿ùµå ÁÂÇ¥°¡ ¾Æ´Ï¾î¼­ Nemo °´Ã¼ÀÇ ÁÂÇ¥¿Í Á÷Á¢ÀûÀ¸·Î ºñ±³ÇÒ ¼ö ¾ø´Ù. Nemo °´Ã¼°¡ °¡Áø ÁÂÇ¥´Â º¯È¯µÇ±â ÀüÀÇ ¿ùµå ÁÂÇ¥ÀÌÁö Nemo°¡ È­¸é¿¡ Ãâ·ÂµÇ¾î ÀÖ´Â ÀåÄ¡ ÁÂÇ¥°¡ ¾Æ´Ï´Ù. ±×·¡¼­ ÀåÄ¡ ÁÂÇ¥¸¦ ¿ªÀ¸·Î ¿ùµå ÁÂÇ¥·Î º¯È¯ÇØ¾ß ÇÑ´Ù.

 

Matrix M;

M.Translate(50,50);

M.Scale(2,2);

M.Invert();

M.TransformPoints(&pt);

 

¿ùµå º¯È¯¿¡ »ç¿ëµÈ Çà·Ä °´Ã¼ÀÇ ¿ªÇà·ÄÀ» ¸¸µé°í TransformPoints ÇÔ¼ö¸¦ È£ÃâÇϸé ÀåÄ¡ ÁÂÇ¥°¡ ¿ùµå ÁÂÇ¥°¡ µÈ´Ù. ¹Ý´ëÀÇ º¯È¯À̹ǷΠ¿ªÇà·ÄÀÌ ÇÊ¿äÇÏ´Ù. ¿ùµå º¯È¯ÀÌ 2¹èÇÑ ÈÄ 50À» ´õÇÏ´Â °ÍÀ̾úÀ¸¹Ç·Î ¹Ý´ë º¯È¯Àº 50À» »©°í Àý¹ÝÀ¸·Î Ãà¼ÒÇÏ´Â º¯È¯ÀÏ °ÍÀÌ´Ù. ÀÌ ÁÂÇ¥´Â Nemo °´Ã¼ÀÇ ¿ùµå ÁÂÇ¥¿Í Á÷Á¢ ºñ±³ °¡´ÉÇÏ´Ù.

ȸÀüÀ̳ª ±â¿ïÀ̱⠰°Àº Á» ´õ º¹ÀâÇÑ º¯È¯À» »ç¿ëÇß´õ¶óµµ ¿ø·ÐÀûÀÎ ¹æ¹ýÀº µ¿ÀÏÇÏ´Ù. ¿ùµå º¯È¯¿¡ »ç¿ëÇÑ Çà·ÄÀÇ ¿ªÇà·ÄÀ» ±¸ÇÑ ÈÄ TransformPoints·Î ¿ªº¯È¯À» ¼öÇàÇÏ¸é µÈ´Ù. ´Ü ȸÀüÀÇ °æ¿ì »ç°¢ÇüÀÌ ´Ù°¢ÇüÀÌ µÇ¹Ç·Î °¢ ²ÀÁöÁ¡ÀÇ ÁÂÇ¥¸¦ º¯È¯ÇÏ¿© Æнº¸¦ ±¸¼ºÇؾ߸¸ Á¤È®ÇÑ È÷Æ® Å×½ºÆ®°¡ °¡´ÉÇÏ´Ù. À̶§´Â ºñ±³¸¦ ÇÏ´Â ¹æ¹ý ÀÚü°¡ ´Þ¶óÁ®¾ß ÇÑ´Ù. ÀÌ ½Ç½ÀÀº ´ÙÀ½ Ç׿¡¼­ ÇØ º¼ °ÍÀÌ´Ù.

´Ù.º¹ÇÕ º¯È¯

µÎ °¡Áö ÀÌ»óÀÇ º¯È¯À» µ¿½Ã¿¡ Àû¿ëÇÏ´Â °ÍÀ» º¹ÇÕ º¯È¯(Composite Transformation)À̶ó°í ÇÑ´Ù. ´ÜÀÏ º¯È¯º¸´Ù ÈξÀ ´õ ´Ù¾çÇÑ ÇüÅÂÀÇ º¯È¯À» ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ½Ç¿ë¼ºÀº º¹ÇÕ º¯È¯ÀÌ ´õ ³ô´Ù. °í¼öÁØÀÇ ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¶§´Â ¿©·¯ °³ÀÇ º¯È¯ ¸Þ¼Òµå¸¦ ¼ø¼­¿¡ ¸Â°Ô ÀûÀýÇÏ°Ô È£ÃâÇؾ߸¸ º¹ÇÕ º¯È¯À» ÇÒ ¼ö Àִµ¥ ºñÇØ Çà·ÄÀº ´Ü Çϳª¸¸ »ç¿ëÇÏ¸é µÇ°í ¼ø¼­µµ ÀÚÀ¯·Ó°Ô ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÈξÀ ´õ È°¿ë¼ºÀÌ ³ô´Ù.

º¹ÇÕ º¯È¯ÀÌ ¾î¶² ½ÄÀ¸·Î ¼öÇàµÇ´ÂÁö ¼öÇÐÀûÀ¸·Î °ËÅäÇØ º¸ÀÚ. ´Ü, ´Ù¼Ò ³­À̵µ°¡ ³ôÀ¸¹Ç·Î ±»ÀÌ ´Ù ÀÌÇØÇÏ·Á°í ¾Ö¾µ ÇÊ¿ä´Â ¾ø´Ù. ¿ÏÀüÈ÷ ÀÌÇØÇÏÁö ¸øÇÏ´õ¶óµµ ´Ü ÇϳªÀÇ Çà·Ä·Î º¹ÇÕ º¯È¯ÀÌ °¡´ÉÇÏ´Ù´Â °Í¸¸ ÀÌÇØÇϸé Çà·ÄÀÇ À¯¿¬¼ºÀ» ½Ç°¨ÇÒ ¼ö ÀÖÀ» °ÍÀ̸ç GDI+ÀÇ º¯È¯ÀÌ ¼öÇÐÀû ü°è¸¦ Àß °®Ãß°í ÀÖÀ½À» ¾Ë°Ô µÉ °ÍÀÌ´Ù.

 

¿¹ Á¦ : Composite

#include <math.h>

TCHAR Mode=TEXT('1');

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

     Matrix M;

 

     if (Mode == TEXT('1')) {

          // È®´ë ÈÄ À̵¿

          G.TranslateTransform(50,50);

          G.ScaleTransform(2,2);

     } else if (Mode == TEXT('2')) {

          // È®´ë ÈÄ À̵¿ - Çà·Ä

          M.SetElements(2,0,0,2,50,50);

          G.SetTransform(&M);

     } else if (Mode == TEXT('3')) {

          // À̵¿ ÈÄ È®´ë

          G.ScaleTransform(2,2);

          G.TranslateTransform(50,50);

     } else if (Mode == TEXT('4')) {

          // À̵¿ ÈÄ È®´ë - Çà·Ä

          M.SetElements(2,0,0,2,100,100);

          G.SetTransform(&M);

     } else if (Mode == TEXT('5')) {

          // ÁßÁ¡ ±âÁØ 30µµ ȸÀü

          M.RotateAt(-30,PointF(80,40));

          G.SetTransform(&M);

     } else if (Mode == TEXT('6')) {

          // 30µµ ȸÀü

          M.Rotate(-30);

          G.SetTransform(&M);

     } else if (Mode == TEXT('7')) {

          // ÁßÁ¡ ±âÁØ 30µµ ȸÀü - ¼¼°³ÀÇ º¹ÇÕ º¯È¯

          G.TranslateTransform(80,40);

          G.RotateTransform(-30); 

          G.TranslateTransform(-80,-40);

     } else if (Mode == TEXT('8')) {

          // ÁßÁ¡ ±âÁØ 30µµ ȸÀü - Çà·Ä

          double rad=-30*3.14/180;

          M.SetElements((REAL)cos(rad),(REAL)sin(rad),-(REAL)sin(rad),(REAL)cos(rad),

              -80*(REAL)cos(rad)+40*(REAL)sin(rad)+80,

              -80*(REAL)sin(rad)-40*(REAL)cos(rad)+40);

          G.SetTransform(&M);

     }

    

     G.DrawEllipse(&Pen(Color(0,0,0),3),10,10,140,60);

     Font F(L"±¼¸²",18,FontStyleRegular,UnitPoint);

     G.DrawString(L"º¹ÇÕ º¯È¯",-1,&F,PointF(20,30),&SolidBrush(Color(0,0,0)));

}

 

Ÿ¿ø ¾ÈÂÊ¿¡ ¹®ÀÚ¿­ Çϳª¸¦ Ãâ·ÂÇØ ³õ¾Ò´Ù. Ÿ¿øÀÇ Á»ó´Ü ÁÂÇ¥´Â (10,10)Àε¥ ÀÌ Á¡ÀÌ ¾î¶»°Ô ¿òÁ÷ÀÌ´ÂÁö¸¸ Àß °üÂûÇØ º¸¸é µÈ´Ù. º¯È¯À» Àû¿ëÇÏÁö ¾Ê¾ÒÀ» ¶§ÀÇ ¿øº» ±×¸²Àº ´ÙÀ½°ú °°´Ù.

È®´ë ÈÄ À̵¿À» ÇØ º¸ÀÚ. µÎ º¯È¯ÀÌ µ¿½Ã¿¡ Àû¿ëµÇ¹Ç·Î º¹ÇÕ º¯È¯ÀÌ´Ù. µÚÂÊÀÇ º¯È¯ÀÌ ¸ÕÀú Àû¿ëµÇ¹Ç·Î Translate, Scale ¼øÀ¸·Î È£ÃâÇØ¾ß ÇÑ´Ù. 2¹è È®´ëÇÑ ÈÄ 50¸¸Å­ À̵¿½ÃÄ×À¸¹Ç·Î Ÿ¿øÀÇ Á»ó´ÜÀº 10 * 2 + 50 = 70ÀÌ µÉ °ÍÀÌ´Ù.

È®´ë ÈÄ À̵¿À» ÇϳªÀÇ Çà·Ä·Î Ç¥ÇöÇØ º¸ÀÚ. º¹ÇÕ º¯È¯Àº ¿øÁ¡ ÁÂÇ¥¿¡ µÎ °³ÀÇ Çà·ÄÀ» ¼ø¼­´ë·Î °öÇؼ­ °á°ú ÁÂÇ¥¸¦ »êÃâÇÑ´Ù.

Scale°ú TranslateÀÇ º¯È¯½ÄÀº ¸ðµÎ Çà·Ä·Î Ç¥ÇöµÇ´Âµ¥ ScaleÀÇ Çà·ÄÀÌ ¸ÕÀú °öÇØÁ® Àû¿ëµÇ°í ´ÙÀ½À¸·Î Translate Çà·ÄÀÌ °öÇØÁø´Ù. µÎ Çà·ÄÀ» °öÇϸé ÇϳªÀÇ Çà·ÄÀÌ µÇ¸ç ÀÌ Çà·ÄÀ» Matrix °´Ã¼·Î Á¤ÀÇÇÑ ÈÄ SetTransformÀ¸·Î Àü´ÞÇϸé È®´ë ÈÄ À̵¿ º¹ÇÕ º¯È¯ÀÌ Çѹø¿¡ ¼öÇàµÇ´Â °ÍÀÌ´Ù. Translate, ScaleÀ» ¼ø¼­´ë·Î È£ÃâÇÑ °Í°ú ÀÌ µÎ Çà·ÄÀ» Çϳª·Î ÇÕÃÄ Çà·ÄÀ» ÁöÁ¤ÇÑ °Í°ú º¯È¯ È¿°ú´Â ¿ÏÀüÈ÷ °°´Ù.

ÀÌ Á¤µµÀÇ °£´ÜÇÑ º¹ÇÕ º¯È¯ Á¤µµ´Â ¾Ï»êÀ¸·Îµµ °è»ê °¡´ÉÇÏ´Ù. ´ÙÀ½Àº º¯È¯ÀÇ ¼ø¼­¸¦ ¹Ù²Ù¾î À̵¿ ÈÄ È®´ë¸¦ ÇØ º¸ÀÚ. ScaleÀ» ¸ÕÀú È£ÃâÇÏ°í Translate¸¦ ³ªÁß¿¡ È£ÃâÇØ¾ß À̵¿ÀÌ ¸ÕÀú ¼öÇàµÈ´Ù. È®´ë ÈÄ À̵¿°ú´Â °á°ú°¡ ´Ù¸¥µ¥ ÀÌ Á¡Àº ¾Õ¿¡¼­µµ ÀÌ¹Ì ¿¬±¸ÇØ º» ¹Ù ÀÖ´Ù. Ÿ¿øÀÇ Á»ó´ÜÁ¡Àº (10 + 50) * 2°¡ µÇ¹Ç·Î 120ÀÌ µÈ´Ù.

À̵¿ ÈÄ È®´ë¸¦ ÇϳªÀÇ Çà·Ä·Î Ç¥ÇöÇØ º¸ÀÚ. È®´ë ÈÄ À̵¿¿¡ ºñÇØ °öÇØÁö´Â Çà·ÄÀº °°Áö¸¸ ¼ø¼­°¡ ´Þ¶óÁüÀ¸·Î Çؼ­ °á°úµµ ´Þ¶óÁø´Ù.

°öÇØÁö´Â °ªÀº °°Áö¸¸ ´õÇØÁö´Â °ªÀÌ 100ÀÌ µÈ´Ù. Á¤¼ö³¢¸®ÀÇ °ö¼À¿¡¼­´Â ±³È¯ ¹ýÄ¢ÀÌ ¼º¸³ÇÏ¿© A*B = B*A¿Í °°´Ù. ±×·¯³ª Çà·Ä³¢¸®ÀÇ °ö¼ÀÀº ±³È¯ ¹ýÄ¢ÀÌ ¼º¸³ÇÏÁö ¾Ê¾Æ ¾î¶² Çà·ÄÀ» ¸ÕÀú °öÇϴ°¡¿¡ µû¶ó °á°ú°¡ ´Þ¶óÁø´Ù. A*B´Â B*A¿Í ´Ù¸£¸ç ±×·¡¼­ º¯È¯ÀÇ ¼ø¼­°¡ Àǹ̰¡ ÀÖ´Â °ÍÀÌ´Ù.

´ÙÀ½Àº ¼¼ °¡Áö ÀÌ»óÀÇ º¯È¯À» °áÇÕÇØ º¸ÀÚ. ´ëÇ¥ÀûÀÎ ¿¹°¡ ÁöÁ¤ÇÑ ÁÂÇ¥¸¦ Áß½ÉÀ¸·Î ȸÀü½ÃÅ°´Â °ÍÀε¥ RotateAt ÇÔ¼ö·Î °£´ÜÇÏ°Ô ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. Ÿ¿øÀÇ Áß½ÉÁ¡ ÁÂÇ¥°¡ (80, 40)À̹ǷΠÀÌ Á¡À» Áß½ÉÀ¸·Î ¹Ý½Ã°è ¹æÇâÀ¸·Î 30µµ ȸÀüÇß´Ù. ¿ÞÂÊÀÌ È¸Àü °á°úÀÌ´Ù. ¿À¸¥ÂÊÀº Rotate ÇÔ¼ö·Î ¿øÁ¡À» ÁöÁ¤ÇÏÁö ¾Ê°í ȸÀüÇÑ °ÍÀε¥ ÀÌ °æ¿ì ÀÛ¾÷¿µ¿ªÀÇ ¿øÁ¡ÀÎ (0,0)À» ±âÁØÀ¸·Î ȸÀüÇϹǷΠ°á°ú°¡ ´Þ¶óÁø´Ù.

 

RotateAt ÇÔ¼ö´Â ¼¼ °¡Áö º¯È¯ ÇÔ¼ö È£Ãâ·Î ºÐÇصȴÙ. ¸ÕÀú Áß½ÉÀ» ¿øÁ¡À¸·Î À̵¿½ÃŲ ÈÄ È¸Àü½ÃÅ°°í ´Ù½Ã ¿øÁ¡À» Á᫐ ÁÂÇ¥·Î ÀçÀ̵¿½ÃÅ°´Â °ÍÀÌ´Ù. ÀÌ ¼¼ º¯È¯À» ÇϳªÀÇ Çà·Ä·Î ¾ÐÃàÇØ º¸ÀÚ.

¼¼ Çà·ÄÀ» Á× ³ª¿­ÇØ ³õ°í ¼ø¼­´ë·Î °öÇÏ¸é µÈ´Ù. ±²ÀåÈ÷ º¹ÀâÇØ º¸ÀÌÁö¸¸ sin, con È£ÃâÀÇ °á°ú°¡ ½Ç¼ö·Î ³ª¿À¹Ç·Î ´Ù °è»êÇÏ¸é °á±¹ ½Ç¼ö »ó¼öµéÀÏ »ÓÀÌ´Ù. °á°ú·Î ³ª¿Â Çà·ÄÀ» Matrix °´Ã¼·Î Á¤ÀÇÇÑ ÈÄ SetTransformÀ¸·Î ÁöÁ¤ÇÏ¸é ¿øº» ÁÂÇ¥¿Í ÀÌ Çà·ÄÀÇ ¿ø¼ÒµéÀÌ °öÇØÁö°í ´õÇØÁ®¼­ (80, 40) Á߽ɿ¡¼­ -30µµ ȸÀüÇÑ À§Ä¡·Î À̵¿ÇØ °¡´Â °ÍÀÌ´Ù.

¸Å¹ø ÀÌ·¸°Ô Çà·ÄÀ» °öÇؼ­ »ç¿ëÇϱ⠹ø°Å·Ó±â ¶§¹®¿¡ RotateAtÀ̶ó´Â ÇÔ¼ö°¡ Á¦°øµÈ´Ù. ÁöÁ¤ÇÑ ÁÂÇ¥¸¦ Áß½ÉÀ¸·Î È®´ëÇÏ´Â ScaleAtÀº Á¦°øµÇÁö ¾ÊÁö¸¸ ÇÊ¿äÇÏ´Ù¸é Á÷Á¢ ¸¸µé¾î ¾²¸é µÈ´Ù. ¿ø¸®´Â ¶È°°´Ù. È®´ë Áß½ÉÀ» ¿øÁ¡À¸·Î ¿Å±â°í È®´ëÇÑ ÈÄ ´Ù½Ã ¿ø·¡ À§Ä¡·Î °¡Á®´Ù ³õÀ¸¸é µÈ´Ù.

4Â÷ ÀÌ»óÀÇ º¹ÇÕ º¯È¯µµ ¶È°°Àº ¹æ¹ýÀ¸·Î Çà·ÄÀ» °öÇϱ⸸ ÇÏ¸é µÈ´Ù. (100,120) ÁÂÇ¥¸¦ ¿øÁ¡À¸·Î ÇÏ¿© 45µµ ȸÀüÇÑ ÈÄ ¿ÞÂÊÀ¸·Î »ì¦ ±â¿ïÀÎ »óÅ¿¡¼­ 2¹è È®´ëÇÏ°í ¼öÆòÀ¸·Î -50, ¼öÁ÷À¸·Î 80 À̵¿ÇÑ ÈÄ ÁÂ¿ì µÚÁý±â °°Àº º¯È¯µµ µü ÇϳªÀÇ Çà·Ä·Î Ç¥ÇöµÈ´Ù. Çà·Ä³¢¸® °öÇϱ⸸ ÇÏ¸é ¾ó¸¶µçÁö º¹ÀâÇÑ º¯È¯µµ °¡´ÉÇÑ ¼ÀÀÌ´Ù. ÀÌ·¸°Ô ¸¸µé¾îÁø Çà·ÄÀÇ ¿ø¼ÒµéÀº ¸ðµÎ »ó¼öÀ̹ǷΠ¾Æ¹«¸® º¹ÀâÇصµ ±²ÀåÈ÷ ºü¸¥ ¼Óµµ·Î 󸮵ȴÙ.

¶ó.ÆäÀÌÁö º¯È¯

¿ùµå ÁÂÇ¥´Â ¿ùµå º¯È¯¿¡ ÀÇÇØ ÆäÀÌÁö ÁÂÇ¥°¡ µÈ´Ù. ±×·¯³ª ÆäÀÌÁö °ø°£µµ ¾ÆÁ÷±îÁö´Â ³í¸®ÀûÀÎ °ø°£À̱⠶§¹®¿¡ »ç¿ëÀÚ ´«¿¡ ¹Ù·Î º¸ÀÌÁö´Â ¾Ê´Â´Ù. ¹°¸®ÀûÀÎ ÀåÄ¡¿¡ Ãâ·ÂÇÏ·Á¸é ÆäÀÌÁö º¯È¯À» Çѹø ´õ °ÅÃÄ¾ß ÇÑ´Ù. ÆäÀÌÁö º¯È¯Àº ´Ü¼øÇؼ­ È®´ë, Ãà¼Ò¸¸ °¡´ÉÇÏ´Ù. GraphicsÀÇ ´ÙÀ½ µÎ ÇÔ¼ö·Î ´ÜÀ§¿Í ¹èÀ²À» º¯°æÇÑ´Ù. °ªÀ» Á¶»çÇÏ´Â Get ÇÔ¼öµµ ¹°·Ð ÀÖ´Ù.

 

Status SetPageUnit(Unit unit);

Status SetPageScale(REAL scale);

 

´ÜÀ§¶õ ±×·¡ÇÈ ¸Þ¼Òµå·Î Àü´ÞµÇ´Â ÁÂÇ¥°ªÀÇ Àǹ̸¦ ±ÔÁ¤Çϴµ¥ µðÆúÆ®´Â Çȼ¿ÀÌ´Ù. ±×·¡¼­ ÁöÁ¤ÇÑ Çȼ¿ Å©±â´ë·Î Ãâ·ÂµÇ´Âµ¥ ´ÜÀ§¸¦ ¹Ù²Ù¸é ÁÂÇ¥°ªÀÇ Àǹ̰¡ ´Þ¶óÁø´Ù. ´ÙÀ½°ú °°Àº ´ÜÀ§µéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

 

´ÜÀ§

¼³¸í

UnitWorld

¿ùµå ÁÂÇ¥°è

UnitDisplay

µð½ºÇ÷¹ÀÌ ´ÜÀ§. ºñµð¿À´Â Çȼ¿, ÇÁ¸°ÅÍ´Â 1/100ÀÎÄ¡

UnitPixel

Çȼ¿

UnitPoint

1/72ÀÎÄ¡

UnitInch

ÀÎÄ¡

UnitDocument

1/300ÀÎÄ¡

UnitMillimeter

¹Ð¸®¹ÌÅÍ

 

ÀåÄ¡ µ¶¸³¼ºÀ» È®º¸Çϱâ À§Çؼ­´Â °¡±ÞÀûÀÌ¸é ³í¸®ÀûÀÎ ´ÜÀ§¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ½ºÄÉÀÏÀº ÁÂÇ¥¿¡ °öÇØÁö´Â °ªÀε¥ µðÆúÆ®´Â 1.0À̶ó ¾Æ¹« È¿°ú°¡ ¾øÁö¸¸ ÀÌ °ªÀ» ´Ã¸®¸é ÁÂÇ¥°¡ ½ºÄÉÀϸ¸Å­ Ä¿Áö°Å³ª ÁÙ¾îµç´Ù.

 

¿¹ Á¦ : PageTransform

REAL scale=1.0f;

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

 

     G.SetPageUnit(UnitPoint);

     G.SetPageScale(scale);

 

     G.DrawRectangle(&Pen(Color(0,0,255),3),50,90,150,50);

     Font F(L"±Ã¼­",25*scale,FontStyleRegular,UnitPoint);

     G.DrawString(L"ÆäÀÌÁö º¯È¯",-1,&F,PointF(50,100),&SolidBrush(Color(0,0,0)));

}

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     HDC hdc;

     PAINTSTRUCT ps;

 

     switch(iMessage) {

     case WM_KEYDOWN:

          switch(wParam) {

          case VK_UP:

              scale += 0.1f;

              InvalidateRect(hWnd,NULL,TRUE);

              break;

          case VK_DOWN:

              scale -= 0.1f;

              InvalidateRect(hWnd,NULL,TRUE);

              break;

          }

          return 0;

     case WM_CREATE:

          hWndMain=hWnd;

          return 0;

     case WM_PAINT:

          hdc=BeginPaint(hWnd, &ps);

          OnPaint(hdc);

          EndPaint(hWnd, &ps);

          return 0;

     case WM_DESTROY:

          PostQuitMessage(0);

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

Àμ⸦ °í·ÁÇϱâ À§ÇØ ³í¸®ÀûÀÎ Æ÷ÀÎÆ® ´ÜÀ§¸¦ »ç¿ëÇß´Ù. µû¶ó¼­ ÀÌÈÄÀÇ ÁÂÇ¥³ª Å©±â´Â ¸ðµÎ Æ÷ÀÎÆ® ´ÜÀ§·Î Çؼ®µÈ´Ù. ±Û²Ã Å©±â 25¿¡ Çػ󵵰¡ °í·ÁµÇ¾î ½ÇÁ¦ Å©±â°¡ °è»êµÇ¹Ç·Î È­¸é¿¡¼­³ª ÇÁ¸°ÅÍ¿¡¼­³ª ÀÏÁ¤ÇÑ Å©±â´ë·Î Ãâ·ÂµÈ´Ù. ½ºÄÉÀÏ°ªÀº 1.0À¸·Î ÃʱâÈ­Çߴµ¥ »óÇÏ Ä¿¼­ À̵¿Å°·Î ½ÇÇàÁß¿¡ È®´ë ¹èÀ²À» ¹Ù²Ü ¼ö ÀÖ´Ù.

  

½ºÄÉÀÏÀÌ Á¶Á¤µÇ¹Ç·Î »ç°¢Çü°ú ÆùÆ®ÀÇ Å©±â°¡ °°ÀÌ Ä¿Áø´Ù. ±×·¯³ª ÆäÀÌÁö º¯È¯Àº ¿ÏÀüÇÏÁö ¾Ê´Ù. ±×¸®±â ¸Þ¼ÒµåÀÇ ÁÂÇ¥¿¡¸¸ ¹èÀ²ÀÌ Àû¿ëµÇ¸ç ±Û²ÃÀ̳ª À̹ÌÁöÀÇ Å©±â¿¡´Â È¿°ú°¡ ¾ø´Ù. ±Û²Ã Å©±â¿¡ scaleÀ» °öÇÏ´Â °ÍÀº Á÷Á¢ ÇØ¾ß ÇÑ´Ù. À§ Äڵ忡¼­ ÆùÆ® »ý¼º¹®ÀÇ *scaleÀ» »©¸é ±Û²ÃÀº Ç×»ó 25 Æ÷ÀÎÆ® Å©±â·Î ±×·ÁÁø´Ù. ÀÌ¿¡ ºñÇØ ¿ùµå º¯È¯Àº Å©±â¿¡µµ Á÷Á¢ Àû¿ëµÇ¾î ÈξÀ ´õ ¿ÏÀüÇÏ´Ù.

¸¶.ÄÁÅ×À̳Ê

Graphics °´Ã¼ÀÇ ¼Ó¼ºÀº ¾ðÁ¦µçÁö º¯°æ °¡´ÉÇÏ´Ù. ¿©·¯ °¡Áö ¼Ó¼ºÀ» ¸ñÀû¿¡ µû¶ó ¸¶±¸ ¹Ù²Ù´Ù º¸¸é ¿ø·¡´ë·Î µ¹¾Æ¿À±â´Â ¾î·Æ´Ù. ±×·¡¼­ ÇöÀç »óŸ¦ ±×´ë·Î ÀúÀåÇØ ³õ°í ÇÊ¿äÇÒ ¶§ ¿ø·¡´ë·Î º¹±¸ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ Á¦°øµÇ´Âµ¥ À̸¦ ÄÁÅ×À̳ʶó°í ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö·Î ÄÁÅ×ÀÌÅ͸¦ ½ÃÀÛÇÏ°í ³¡³½´Ù.

 

GraphicsContainer BeginContainer(VOID);

Status EndContainer(GraphicsContainer state);

 

ÀÌ µÎ ÇÔ¼ö »çÀÌ¿¡¼­ ¼Ó¼ºÀ» ¸¶À½´ë·Î º¯°æÇÒ ¼ö ÀÖ´Ù. ÀÌ·± °³³äÀº SaveDC, RestoreDC¶ó´Â ÇÔ¼ö·Î GDI¿¡¼­µµ ÀÖ¾ú´Âµ¥ µ¿ÀÏÇÑ °³³äÀ̶ó°í º¸¸é µÈ´Ù. ±×·¡ÇÈ ÇÔ¼ö³»¿¡¼­ Àá½Ã¸¸ ¼Ó¼ºÀ» ¹Ù²Ù¾î ¾²°í ½Í´Ù°Å³ª ÇÒ ¶§ ÇÔ¼ö³»¿¡¼­ ÄÁÅ×À̳ʸ¦ ±¸¼ºÇÑ´Ù. ÄÁÅ×À̳ʴ Graphics °´Ã¼ÀÇ ¼Ó¼ºÀ» ÀúÀåÇÏ´Â ÀúÀå¼ÒÀÌ¸ç º¯È¯, Ŭ¸®ÇÎ ¿µ¿ª, ·£´õ¸µ ¿É¼Ç µîÀÌ ÀúÀåµÈ´Ù. °£´ÜÇÑ µ¿ÀÛ ¿¹¸¦ º¸ÀÚ.

 

¿¹ Á¦ : Container

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

     Pen P(Color(0,0,0));

     GraphicsContainer C;

 

     // (100,100) Á߽ɿ¡ °ËÁ¤»ö ¿ø

     G.TranslateTransform(100,100);

     G.DrawEllipse(&Pen(Color(0,0,0),3),-32,-32,64,64);

    

     C=G.BeginContainer();

          // (200,100) Á߽ɿ¡ »¡°£»ö ¿ø

          G.TranslateTransform(100,0);

          G.DrawEllipse(&Pen(Color(255,0,0),3),-32,-32,64,64);

     G.EndContainer(C);

 

     // (100,200) Á߽ɿ¡ ÆĶõ»ö ¿ø

     G.DrawEllipse(&Pen(Color(0,0,255),3),-32,-32+100,64,64);

}

 

°¡·Î, ¼¼·Î·Î 100¸¸Å­ ÆòÇà À̵¿ º¯È¯À» ÁöÁ¤ÇÏ°í ¿øÁ¡¿¡ °ËÁ¤»ö Ÿ¿øÀ» ±×·È´Ù. Ÿ¿øÀÇ Áß½ÉÀÌ Á¤È®ÇÏ°Ô (100,100)ÀÌ µÉ °ÍÀÌ´Ù. ÀÌ »óÅ¿¡¼­ °¡·Î·Î 100¸¸Å­ ´õ ÆòÇà À̵¿À» ÇÏ¿© ±× À§Ä¡¿¡ »¡°£»ö ¿øÀ» ±×¸®°í ½Í´Ù°í ÇÏÀÚ. ÆòÇà À̵¿ÇÏ´Â °ÍÀº ¾Æ¹« ¹®Á¦°¡ ¾øÀ¸³ª ´ÙÀ½¿¡ ¿ø·¡´ë·Î µ¹¾Æ¿À·Á¸é ¿ªº¯È¯À» ÇØ¾ß ÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù.

±×·¡¼­ º¯È¯À» Ãß°¡ ÁöÁ¤Çϱâ Àü¿¡ BeginContainer ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÄÁÅ×À̳ʸ¦ ±¸¼ºÇß´Ù. ÄÁÅ×À̳ʳ»¿¡¼­ 100¸¸Å­ ¼öÆòÀ¸·Î ÆòÇà À̵¿ÇÏ¿© »¡°£»ö Ÿ¿øÀ» ±×·È´Âµ¥ ÁÂÇ¥´Â °°Áö¸¸ 100¸¸Å­ ¿À¸¥ÂÊÀ¸·Î ´õ ÆòÇà À̵¿ÇßÀ¸¹Ç·Î °ËÁ¤»ö Ÿ¿øº¸´Ù ´õ ¿À¸¥ÂÊ¿¡ Ãâ·ÂµÉ °ÍÀÌ´Ù. EndContainer¸¦ È£ÃâÇÏ¸é ¿ø·¡ º¯È¯´ë·Î º¹±¸µÈ´Ù. ÀÌ »óÅ¿¡¼­ ¾Æ·¡ÂÊÀ¸·Î 100¸¸Å­ ³»¸° °÷¿¡ ÆĶõ»ö Ÿ¿øÀ» Ãâ·ÂÇϸé (100,100)À» ¿øÁ¡À¸·Î ÇÏ¿© ¾Æ·¡ÂÊÀ¸·Î 100 ¶³¾îÁø °÷¿¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.

BeginContainer ÇÔ¼ö´Â ÇöÀçÀÇ Graphics °´Ã¼ »óŸ¦ ½ºÅÿ¡ ÀúÀåÇÏ°í ÀúÀåµÈ À§Ä¡¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ À§Ä¡°ªÀº GraphicsÀÇ ÇöÀç »óŸ¦ ´ëÇ¥ÇÏ´Â Á¤º¸ ºí·ÏÀ» °¡¸®Å²´Ù. ÀÌÈÄ ¼Ó¼ºÀ» ¸¶À½´ë·Î ¹Ù²Ü ¼ö ÀÖÀ¸¸ç EndContainer·Î À§Ä¡°ªÀ» ´Ù½Ã Àü´ÞÇÏ¸é ¿ø·¡ÀÇ Á¤º¸¸¦ º¹±¸ÇÑ´Ù. ÄÁÅ×À̳ʰ¡ ÀúÀåÇÏ´Â Á¤º¸´Â ½ºÅÿ¡ ÀúÀåµÇ¹Ç·Î ¾ó¸¶µçÁö Áßø °¡´ÉÇÏ´Ù.

ÀÌ ¿¹Á¦¿Í °°Àº °£´ÜÇÑ ¼Ó¼º º¯°æ Á¤µµ¶ó¸é ±»ÀÌ ÄÁÅ×À̳ʸ¦ ±¸¼ºÇÒ ÇÊ¿ä¾øÀÌ º¯È¯À» ¿ø·¡´ë·Î µÇµ¹¸®µç°¡ Ãâ·Â ¼ø¼­¸¦ ¹Ù²ãµµ µÈ´Ù. ±×·¯³ª ¿©·¯ °³ÀÇ ¼Ó¼ºÀ» ÇѲ¨¹ø¿¡ ¹Ù²Û´Ù°Å³ª Ãâ·Â ¼ø¼­ Á¶Á¤ÀÌ ¾î·Á¿î °æ¿ìµµ ¸¹Àºµ¥ ÀÌ·² ¶§´Â ÄÁÅ×À̳ʰ¡ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. ¿¹¸¦ µé¾î ¾ÆÁÖ º¹ÀâÇÑ µµ¸éÀ» Ãâ·ÂÇÏ´Â ÇÔ¼ö°¡ ÀÖ´Ù°í ÇÏÀÚ.

 

void DrawSome(Graphics &G)

{

     BeginContainer();

     // ¼Ó¼ºÀ» ¸¶À½´ë·Î º¯°æ

     EndContainer();

}

 

ÇÔ¼ö ³»¿¡¼­ ¿©·¯ ¼Ó¼ºÀ» ¹Ù²ã¼­ Ãâ·ÂÀ» Çϴµ¥ È£ÃâÇÏ´Â °÷ÀÇ ¿ø·¡ ¼Ó¼ºÀ» ¾Ë±â ¾î·Æ´Ù. ÀÌ·² ¶§´Â ÇÔ¼ö ³»¿¡¼­ ÄÁÅ×À̳ʸ¦ ±¸¼ºÇÏ¿© ¸¶À½´ë·Î ¹Ù²Ù°í ¸®ÅÏÇϱâ Àü¿¡ ¿ø·¡´ë·Î µ¹·Á ³õÀ¸¸é µÈ´Ù. ÄÁÅ×À̳ʳ¢¸® Áßø °¡´ÉÇϹǷΠÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÂÊ¿¡¼­ ÄÁÅ×À̳ʸ¦ »ç¿ëÇÏ´õ¶óµµ ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù. ´ÙÀ½ µÎ ÇÔ¼ö·Îµµ µ¿ÀÏÇÑ È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù.

 

GraphicsState Save(VOID);

Status Restore(GraphicsState gstate);

 

Save´Â ÇöÀç »óŸ¦ ÀúÀåÇÏ°í Restore´Â º¹±¸ÇÑ´Ù. ¶È°°Àº ¿¹Á¦¸¦ ÀÌ ÇÔ¼ö·Î ¸¸µé¾î º¸¾Ò´Ù. »ç¿ëÇÏ´Â ÇÔ¼ö¸¸ ´Ù¸¦ »Ó °á°ú´Â µ¿ÀÏÇÏ´Ù.

 

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

     Pen P(Color(0,0,0));

     GraphicsState S;

 

     // (100,100) Á߽ɿ¡ °ËÁ¤»ö ¿ø

     G.TranslateTransform(100,100);

     G.DrawEllipse(&Pen(Color(0,0,0),3),-32,-32,64,64);

 

     S=G.Save();

          // (200,100) Á߽ɿ¡ »¡°£»ö ¿ø

          G.TranslateTransform(100,0);

          G.DrawEllipse(&Pen(Color(255,0,0),3),-32,-32,64,64);

     G.Restore(S);

 

     // (100,200) Á߽ɿ¡ ÆĶõ»ö ¿ø

     G.DrawEllipse(&Pen(Color(0,0,255),3),-32,-32+100,64,64);

 

´ÙÀ½Àº BeginContainerÀÇ ´Ù¸¥ ¿øÇüÀ» º¸ÀÚ.

 

GraphicsContainer BeginContainer(const Rect &dstrect, const Rect &srcrect, Unit unit);

 

µÎ °³ÀÇ »ç°¢ ¿µ¿ªÀ» Àü´Þ¹Þ¾Æ ÀÌ ¿µ¿ªÀÇ Å©±â ºñÀ²´ë·Î ÄÁÅ×ÀÌ³Ê ³»ÀÇ º¯È¯À» ÀÚµ¿À¸·Î Àû¿ëÇÑ´Ù. ȸÀüÀ̳ª ±â¿ïÀ̱⠰°Àº º¯È¯Àº ¾ÈµÇ°í À̵¿°ú È®´ë¸¸ °¡´ÉÇÏ´Ù.

 

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

     GraphicsContainer C;

 

     G.DrawEllipse(&Pen(Color(255,0,0),3),10,10,80,80);

 

     Rect src(0,0,100,100);

     Rect dest(100,100,300,200);

     C=G.BeginContainer(dest,src,UnitPixel);

          G.DrawEllipse(&Pen(Color(0,0,255),3),10,10,80,80);

     G.EndContainer(C);

}

 

(10,10)¿¡¼­ (90,90)¿¡ °ÉÄ¡´Â »¡°£»ö ¿øÀ» ±×·È´Ù. ÀÌ ¿øÀÌ ÀÖ´Â ¿µ¿ªÀ» ¿øº»À¸·Î ÇÏ°í (100,100)¿¡¼­ Æø 300, ³ôÀÌ 200À» ¸ñÀû ¿µ¿ªÀ¸·Î ÇÏ¿© ÄÁÅ×À̳ʸ¦ ½ÃÀÛÇß´Ù. Á»ó´Ü ÁÂÇ¥°¡ 100,100 ¸¸Å­ Â÷ÀÌ°¡ ³ª¹Ç·Î °¡·Î, ¼¼·Î ¸ðµÎ 100¾¿ ÆòÇà À̵¿ÇÒ °ÍÀÌ°í Å©±âµµ Â÷ÀÌ°¡ ³ª¹Ç·Î °¡·Î·Î 3¹è È®´ë, ¼¼·Î·Î 2¹è È®´ëµÈ´Ù.

ƯÁ¤ ¿µ¿ªÀÇ ÁÂÇ¥¸¦ ±âÁØÀ¸·Î ÇÑ ±×¸²À» ´Ù¸¥ ¿µ¿ª¿¡ È®´ë, À̵¿ÇÏ¿© Ãâ·ÂÇÏ°í ½ÍÀ» ¶§ ÄÁÅ×À̳ʸ¸ ±¸¼ºÇϸé ÀÚµ¿À¸·Î ÇÊ¿äÇÑ º¯È¯ÀÌ ¼³Á¤µÇ¾î Æí¸®ÇÏ´Ù. ÀÌ·± ±â´ÉÀº ¸¶Ä¡ GDIÀÇ MM_ANISOTROPIC ¸ÊÇÎ ¸ðµå¿Í À¯»çÇѵ¥ ÀÛ¾÷¿µ¿ªÀ» °¡µæ ä¿ì´Â ±×¸²À» ±×¸®°í ½ÍÀ» ¶§ ¿øº» ±×¸² ¿µ¿ªÀ» ÀÛ¾÷ ¿µ¿ª¿¡ ¸ÊÇÎ ½ÃÅ°¸é µÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â GDI·Î ¸¸µé¾ú´ø °ÍÀ» GDI+ ¹öÀüÀ¸·Î ¿Å°Üº» °ÍÀÌ´Ù.

 

void OnPaint(HDC hdc)

{

     Graphics G(hdc);

     GraphicsContainer C;

     RECT crt;

     GetClientRect(hWndMain,&crt);

 

     Rect src(0,0,160,100);

     Rect dest(0,0,crt.right,crt.bottom);

     C=G.BeginContainer(dest,src,UnitPixel);

          G.FillRectangle(&SolidBrush(Color(255,0,0)),20,30,110,60);

          Point ar[]={Point(25,10),Point(125,10),Point(140,30),Point(10,30),Point(25,10)};

          G.FillPolygon(&SolidBrush(Color(0,0,255)),ar,5);

          G.FillRectangle(&SolidBrush(Color(255,255,0)),30,40,30,30);

          G.FillRectangle(&SolidBrush(Color(255,255,0)),90,40,30,30);

          G.FillEllipse(&SolidBrush(Color(255,255,0)),135,5,20,20);

     G.EndContainer(C);

}

 

¸ðµç ¸Þ¼Òµå´Â (160,100)ÀÇ ¿µ¿ª¾È¿¡ ±×¸®±â¸¦ Çϸç ÀÌ ¿µ¿ªÀ» ÀÛ¾÷ ¿µ¿ª°ú ¸ÊÇνÃÄ×´Ù. ÄÁÅ×ÀÌ³Ê ³»¿¡¼­ È®¹è º¯È¯ÀÌ Àû¿ëµÇ¾î ÀÛ¾÷¿µ¿ª¿¡ °¡µæÂù ±×¸²ÀÌ ±×·ÁÁø´Ù.

 

½ÇÇàÇØ º¸¸é ³ª¸§´ë·Î Àç¹ÌÀÖ´Ù. °ú°Å ½Ã°è ÇÁ·Î±×·¥ÀÌ ÀÌ·± ÇüÅ¿´¾ú´Âµ¥ ¿äÁòÀº À¯ÇàÀÌ Áö³ª°¡¼­ Àß »ç¿ëµÇÁö ¾Ê´Â´Ù.

¹Ù.ÅؽºÆ® ¹Ú½º

´ÙÀ½ ¿¹Á¦´Â GDI+ÀÇ º¯È¯ ±â´ÉÀ» Àü¹ÝÀûÀ¸·Î Å×½ºÆ®ÇÑ´Ù. ÆÄ¿ö Æ÷ÀÎÆ®ÀÇ ÅؽºÆ® ¹Ú½º¸¦GDI+·Î ¸¸µé¾î º» °ÍÀÌ´Ù.

 

¿¹ Á¦ : TextBox

¼Ò½º »ý·«

 

½ÇÇàÇØ º¸¸é ¹è°æ¿¡ ´Ùº¸Å¾ ±×¸²ÀÌ ÀÖ°í µÎ °³ÀÇ ÅؽºÆ® ¹Ú½º°¡ ³ªÅ¸³­´Ù. ÀÌ·ÐÀûÀ¸·Î ¹«ÇÑ°³ÀÇ ÅؽºÆ® ¹Ú½º¸¦ ¹èÄ¡ÇÒ ¼ö ÀÖÁö¸¸ ¿¹Á¦À̹ǷΠµü µÎ °³¸¸ »ý¼ºÇØ º¸¾Ò´Ù. °¢ ÅؽºÆ® ¹Ú½º´Â °æ°è¼±À» ²ø¾î¼­ µå·¡±×ÇÒ ¼ö ÀÖÀ¸¸ç Æ®·¡Ä¿¸¦ ²ø¾î Å©±â¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. ±×¸®°í À§ÂÊÀÇ µ¿±×¶õ Æ®·¡Å©¸¦ Á¿ì·Î µå·¡±×Çϸé ȸÀüµµ °¡´ÉÇÏ´Ù.

¶ÇÇÑ ¸¶¿ì½º ÈÙÀ» ±¼¸®¸é Àüü È­¸éÀ» È®´ë ¹× Ãà¼ÒÇÒ ¼öµµ ÀÖ´Ù. ¿ùµå º¯È¯ °úÁ¤¿¡¼­ È®´ë¸¦ ÇϹǷΠ¹è°æÀÇ À̹ÌÁö´Â ¹°·ÐÀÌ°í ÅؽºÆ® ¹Ú½º¿Í ±× ¾ÈÀÇ ¹®ÀÚ¿­±îÁöµµ µ¿ÀÏÇÑ ºñÀ²·Î È®´ëµÈ´Ù.

È®´ë, À̵¿Àº ¹°·ÐÀÌ°í °³º° ÅؽºÆ® ¹Ú½ºÀÇ È¸Àü °¢µµ¸¦ ¼­·Î ´Ù¸£°Ô ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ °úÁ¤¿¡¼­ °¢Á¾ º¹ÇÕ º¯È¯ÀÌ Àû¿ëµÈ´Ù. ¶ÇÇÑ È¸Àü, È®´ë¸¦ Çصµ ÅؽºÆ® ¹Ú½ºÀÇ °æ°è¼±À̳ª Æ®·¡Ä¿ÀÇ À§Ä¡¸¦ Á¤È®ÇÏ°Ô Ã£¾Æ³»´Âµ¥ ÀÌ´Â ¿ªº¯È¯¿¡ ÀÇÇÑ Á¤¹ÐÇÑ °è»ê¿¡ ÀÇÇؼ­ÀÌ´Ù.

ÀÌ ¿¹Á¦´Â ´Ù¼Ò ºÎÇÇ°¡ Ä¿¼­ ¿©±â¼­ ÀÏÀÏÀÌ ºÐ¼®ÇÏÁö ¾Ê±â·Î ÇÑ´Ù. GDI+·Î ÆÄ¿ö Æ÷ÀÎÆ®°°Àº ÇÁ·Î±×·¥À» ¸¸µé¾î º¸°í ½Í´Ù¸é ÀÌ ¿¹Á¦°¡ ¸¹Àº µµ¿òÀÌ µÉ °ÍÀÌ´Ù. º¯È¯¿¡ ´ëÇÑ ¿Ï°áÆíÀ̹ǷΠºÐ¼®ÇØ º¼ °¡Ä¡°¡ ÃæºÐÇÏ´Ù. ³­À̵µ°¡ ³ô¾Æ¼­ ½Ã°£ÀÌ Á» °É¸®°ÚÁö¸¸ ºÐ¼®ÇØ º¸¸é ¸¹Àº °ÍÀ» ¾òÀ» ¼ö ÀÖ´Ù.