µµÇüÀ» Ãâ·ÂÇÏ´Â ±×·¡ÇÈ ¸Þ¼ÒµåµéÀº ¿¹¿Ü¾øÀÌ ÁÂÇ¥¸¦ Àμö·Î Àü´Þ¹Þ´Â´Ù. ¾î¶² µµÇüÀ̵簣¿¡ ¾îµð´Ù Ãâ·ÂÇÒ °ÍÀÎÁö À§Ä¡¸¦ ÁöÁ¤ÇØ¾ß ÇϹǷΠ±×·¡ÇÈ ÇÔ¼öµéÀÌ ÁÂÇ¥¸¦ ¿ä±¸ÇÏ´Â °ÍÀº ´ç¿¬ÇÏ´Ù. ¿¹¸¦ µé¾î 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 ¢er, 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+·Î ÆÄ¿ö Æ÷ÀÎÆ®°°Àº ÇÁ·Î±×·¥À» ¸¸µé¾î º¸°í ½Í´Ù¸é ÀÌ ¿¹Á¦°¡ ¸¹Àº µµ¿òÀÌ µÉ °ÍÀÌ´Ù. º¯È¯¿¡ ´ëÇÑ ¿Ï°áÆíÀ̹ǷΠºÐ¼®ÇØ º¼ °¡Ä¡°¡ ÃæºÐÇÏ´Ù. ³À̵µ°¡ ³ô¾Æ¼ ½Ã°£ÀÌ Á» °É¸®°ÚÁö¸¸ ºÐ¼®ÇØ º¸¸é ¸¹Àº °ÍÀ» ¾òÀ» ¼ö ÀÖ´Ù.