4-1-4.º¯È¯ Çà·Ä

ĵ¹ö½ºÀÇ ¸ðµç º¯È¯Àº Çà·ÄÀ» »ç¿ëÇÑ´Ù. Àá±ñ ¼öÇÐÀûÀÎ ¿¬±¸¸¦ ÇØ º¸ÀÚ. º¯È¯ Çà·ÄÀº 3 * 3ÀÇ Çà·ÄÀÌ¸ç ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.

3¿­Àº °è»êÀ» À§ÇÑ º¸Á¶ ¿ªÇÒÀ» Çϸç 0, 0, 1·Î °ªÀÌ °íÁ¤µÇ¾î ÀÖ´Ù. ¸Þ¼­µå¿¡¼­ ÁöÁ¤ÇÑ ÁÂÇ¥ x, y´Â º¯È¯ Çà·Ä¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ º¯È¯µÈ´Ù.

¿ø·¡ ÁÂÇ¥¿¡ Çà·ÄÀ» °öÇϸé ÃÖÁ¾ Ãâ·Â ÁÂÇ¥°¡ ³ª¿Â´Ù. ÀÌ Çà·Ä½Ä¿¡ ÀÇÇØ ´ÙÀ½ ´ÙÇ×½ÄÀÌ µµÃâµÈ´Ù.

 

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

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

1 = 1

 

¸ðµç Ãâ·Â ÁÂÇ¥´Â ÀÌ ¹æÁ¤½Ä¿¡ ÀÇÇØ °è»êµÈ´Ù. Æò¼Ò¿¡ ÀÌ º¯È¯À» ´À³¥ ¼ö ¾ø´Â ÀÌÀ¯´Â µðÆúÆ® º¯È¯ Çà·ÄÀÌ ´ÜÀ§ Çà·Ä·Î Á¤ÀǵǾî Àֱ⠶§¹®ÀÌ´Ù.

ÀÌ Çà·ÄÀ» °öÇÑ ´ÙÇ×½ÄÀº x' = x, y' = y°¡ µÇ¾î ¾Æ¹«·± º¯È¯ÀÌ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ±×·¡¼­ ¸Þ¼­µå¿¡¼­ ÁöÁ¤ÇÑ ÁÂÇ¥¿¡ ±×´ë·Î Ãâ·ÂµÇ´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ º¯È¯ Çà·ÄÀ» Á¶ÀÛÇϸé ÃÖÁ¾ ÁÂÇ¥°¡ ¿µÇâÀ» ¹Þ´Â´Ù. º¯È¯ Çà·ÄÀº ´ÙÀ½ µÎ ¸Þ¼­µå·Î ÁöÁ¤ÇÑ´Ù.

 

transform(m11, m12, m21, m22, dx, dy)

setTransform(m11, m12, m21, m22, dx, dy)

 

º¯È¯ Çà·ÄÀÇ 1¿­, 2¿­ 6°³ ¿ø¼Ò¸¦ Àμö·Î Àü´ÞÇÑ´Ù. ÀÌ ¿ø¼Ò´Â À§¿¡¼­ º¸ÀÎ ´ÙÇ×½ÄÀÇ °è¼ö·Î »ç¿ëµÈ´Ù. transform ¸Þ¼­µå´Â ÇöÀç º¯È¯¿¡ Ãß°¡·Î º¯È¯À» ´õÇÑ´Ù. ÇöÀç º¯È¯ Çà·Ä¿¡ »õ·Î¿î Çà·ÄÀ» °öÇØ Ãß°¡ÀûÀ¸·Î ´©Àû º¯È¯À» ¼öÇàÇÑ´Ù. ¹Ý¸é setTransform ¸Þ¼­µå´Â ÀÌÀü º¯È¯À» ¹«½ÃÇÏ°í Àμö·Î Àü´Þ¹ÞÀº °ªÀ¸·Î Çà·ÄÀ» ÃʱâÈ­ÇÑ´Ù. ¾Õ¿¡¼­ È®´ë¿Í À̵¿ÀÇ ¼ø¼­¸¦ ¿¬±¸ÇÒ ¶§ ´ÙÀ½ È£Ãâ¹®À» »ç¿ëÇß¾ú´Ù.

 

ctx.setTransform(1,0,0,1,0,0);

 

ÀÌ È£Ãâ¹®¿¡ ÀÇÇØ ´ÜÀ§ Çà·ÄÀ» ÁöÁ¤ÇÔÀ¸·Î½á ¸ðµç º¯È¯ÀÌ ¸®¼ÂµÈ´Ù. Çà·ÄÀÇ ¿ø¼Ò¸¦ º¯°æÇÏ¸é ´ÙÇ׽Ŀ¡ Àû¿ëµÇ¾î º¯È¯ÀÌ ¹ß»ýÇÑ´Ù. Çà·Ä·Î À̵¿ º¯È¯°ú È®´ë º¯È¯À» ¼öÇàÇØ º¸ÀÚ.

 

matrix.html

function draw() {

     ctx.fillStyle="blue";

     ctx.fillRect(50,50,30,30);

 

     ctx.setTransform(1,0,0,1,50,50);

     ctx.fillStyle="red";

     ctx.fillRect(50,50,30,30);

    

     ctx.setTransform(3,0,0,2,0,0);

     ctx.fillStyle="green";

     ctx.fillRect(50,50,30,30);

}

 

(50, 50)¿¡ Ãâ·ÂµÈ ÆĶõ»ö »ç°¢ÇüÀÌ À̵¿¿¡ ÀÇÇØ »¡°£»ö »ç°¢ÇüÀ¸·Î Ãâ·ÂµÇ°í È®´ë¿¡ ÀÇÇØ ÃÊ·Ï»ö »ç°¢ÇüÀ¸·Î Ãâ·ÂµÈ´Ù.

setTransform(1,0,0,1,50,50) È£Ãâ¿¡ ÀÇÇØ x' = x + 50, y' = y + 50ÀÇ ´ÙÇ×½ÄÀÌ »ý¼ºµÇ°í ÀÌ ½Ä¿¡ ÀÇÇØ ¼öÆò, ¼öÁ÷À¸·Î 50¸¸Å­ À̵¿ÇÑ´Ù. ÀÌ È£Ãâ¹®Àº translate(50, 50)°ú °°´Ù. setTransform(3,0,0,2,0,0) È£Ãâ¿¡ ÀÇÇØ x' = 3 * x, y' = 2 * yÀÇ ´ÙÇ×½ÄÀÌ »ý¼ºµÇ°í ÀÌ ½Ä¿¡ ÀÇÇØ ¼öÆòÀ¸·Î 3¹è, ¼öÁ÷À¸·Î 2¹è È®´ëµÈ´Ù. ÀÌ È£Ãâ¹®Àº scale(3, 2)¿Í °°´Ù.

ȸÀüÀÇ °æ¿ì´Â Á» º¹ÀâÇѵ¥ »ï°¢ ÇÔ¼ö°¡ Àû¿ëµÈ´Ù. °á±¹ translate, scale, rotate ¸Þ¼­µå´Â º¯È¯ Çà·ÄÀ» ¸¸µå´Â Æí¸®ÇÑ ¹æ¹ýÀÏ »ÓÀÌ¸ç ³»ºÎÀûÀ¸·Î´Â ¸ðµÎ Çà·Ä °ö¼ÀÀ¸·Î ÁÂÇ¥¸¦ Á¶ÀÛÇÑ´Ù. Çà·Äº¸´Ù´Â ¸Þ¼­µå°¡ ´õ Á÷°üÀûÀÌ°í Æí¸®ÇÏ´Ù. ±×·¸´Ù¸é ¸Þ¼­µå°¡ Àִµ¥ ¿Ö ±»ÀÌ º¯È¯ Çà·ÄÀ» Á÷Á¢ Á¶ÀÛÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â °ÍÀϱî?

Çà·ÄÀ» Á÷Á¢ Á¶ÀÛÇÏ¸é ¿©·¯ °¡Áö ´õ º¹ÀâÇÑ º¯È¯µµ ¼öÇàÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾Õ¿¡¼­ À̵¿°ú È®´ë º¯È¯À» °°ÀÌ Àû¿ëÇÏ´Â ¿¹Á¦¸¦ ¸¸µé¾î º» ÀûÀÌ Àִµ¥ ÀÌ º¯È¯À» Çà·Ä·Î ¼öÇàÇØ º¸ÀÚ. ¸ÕÀú È®´ë ÈÄ À̵¿ º¯È¯ÀÌ´Ù.

 

matrix2.html

function draw() {

     ctx.fillStyle="blue";

     ctx.fillRect(10,10,30,30);

    

//  ctx.translate(50,50);

//  ctx.scale(2,2);

     ctx.setTransform(2, 0, 0, 2, 50, 50);

     ctx.fillStyle="red"

     ctx.fillRect(10,10,30,30);

}

 

½ÇÇà °á°ú´Â ¸Þ¼­µå¸¦ È£ÃâÇÑ °æ¿ì¿Í °°´Ù. scale, translate È£ÃâÀÌ ´ÙÀ½ °ö¼ÀÀÇ ÀÇÇØ ÇϳªÀÇ Çà·Ä·Î ÇÕÃÄÁø´Ù.

º¯È¯ Çà·Ä¿¡ ÀÇÇØ x' = 2 * x + 50À̶ó´Â ½ÄÀÌ ¸¸µé¾îÁø´Ù. ¸ÕÀú °öÇØÁö°í ³ªÁß¿¡ ´õÇØÁö´Â °ÍÀÌ´Ù. yÃà º¯È¯µµ µ¿ÀÏÇÏ´Ù. ´ÙÀ½Àº À̵¿ ÈÄ È®´ë º¯È¯À» º¸ÀÚ.

 

matrix3.html

function draw() {

     ctx.fillStyle="blue";

     ctx.fillRect(10,10,30,30);

    

//  ctx.scale(2,2);

//  ctx.translate(50,50);

     ctx.setTransform(2, 0, 0, 2, 100, 100);

     ctx.fillStyle="red"

     ctx.fillRect(10,10,30,30);

}

 

¾Õ¿¡¼­ »ìÆì ºÃ´Ù½ÃÇÇ À̵¿À» ¸ÕÀú ÇÏ¸é »¡°£»ö »ç°¢ÇüÀÌ ´õ ¸Ö¸® À̵¿ÇÑ´Ù. ÀÌ Çö»óÀº ´ÙÀ½½ÄÀ¸·Î ¼³¸íÇÒ ¼ö ÀÖ´Ù.

ÀÌ º¯È¯ Çà·Ä¿¡ ÀÇÇØ x' = 2 * x + 100 ½ÄÀÌ ¸¸µé¾îÁö¸ç ÀÌ´Â x' = 2 * (x + 50)°ú °°´Ù. ¸ÕÀú ´õÇØÁö°í ³ªÁß¿¡ °öÇØÁö¹Ç·Î ÈξÀ ´õ ¸Ö¸® À̵¿ÇÏ´Â °ÍÀÌ´Ù. º¯È¯ÀÇ ¼ø¼­¿¡ µû¶ó °á°ú°¡ ´Þ¶óÁö´Â ÀÌÀ¯´Â Çà·ÄÀº °ö¼ÀÀÇ ±³È¯ ¹ýÄ¢ÀÌ ¼º¸³ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. Á¤¼ö¿Í´Â ´Þ¸® Çà·ÄÀº AB¿Í BA°¡ °°Áö ¾Ê´Ù. °ÅÁþ¸»ÀÎÁö Á¤¼®Ã¥À» ã¾Æ ºÁ¶ó. ¸ÕÀú °¡ÇØÁö´Â º¯È¯ÀÌ Çà·Ä°öÀÇ ¿ìº¯¿¡ ¿À¸ç ±×·¡¼­ È¿°ú´Â ´õ ´Ê°Ô ³ªÅ¸³­´Ù.

3°³ ÀÌ»óÀÇ º¯È¯µµ ÇϳªÀÇ Çà·Ä·Î Á¤¸®µÈ´Ù. º¯È¯À» ¾Æ¹«¸® ¸¹ÀÌ ¼öÇàÇصµ °á±¹ ÃÖÁ¾ÀûÀ¸·Î´Â º¯È¯ Çà·Ä Çϳª°¡ ¸¸µé¾îÁö¸ç ÀÌ Çà·Ä¿¡ ÀÇÇØ ¸ðµç º¯È¯ÀÌ ¼öÇàµÈ´Ù. ¾Õ¿¡¼­ ¸¸µé¾ú´ø È£µ¹ÀÌ È¸Àü ¿¹Á¦µµ ¼¼ °³ÀÇ Çà·ÄÀ» °öÇϸé setTransform ÇÑ ÁÙÀÌ¸é ¶È°°Àº ¿¹Á¦¸¦ ¸¸µé ¼ö ÀÖ´Ù. º¯È¯À» ¾Æ¹«¸® Áßø½ÃÄѵµ ´Ü ÇѹøÀÇ Çà·Ä ¿¬»êÀ¸·Î ÃÖÁ¾ ÁÂÇ¥°¡ °áÁ¤µÇ¹Ç·Î ¼Óµµ°¡ ´À·ÁÁöÁö ¾Ê´Â´Ù. ÀÌ°ÍÀÌ ¼öÇÐÀÇ ÈûÀÌ´Ù.

Çà·Ä ¿¬»êÀ» Á÷Á¢ ÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÏ´Â ¶Ç ´Ù¸¥ ÀÌÀ¯´Â ¸Þ¼­µå°¡ Á¦°øÇÏÁö ¸øÇÏ´Â º¹ÀâÇÑ º¯È¯À» ó¸®Çϱâ À§Çؼ­ÀÌ´Ù. ¿¹¸¦ µé¾î ±â¿ïÀ̱⠰°Àº º¯È¯Àº Á¦°øµÇÁö ¾ÊÁö¸¸ Çà·ÄÀ» Á÷Á¢ Á¶ÀÛÇÏ¸é ±â¿ïÀÌ´Â °Íµµ °¡´ÉÇÏ´Ù. ´ÙÀ½ ¿¹Á¦´Â È£µ¹ÀÌ À̹ÌÁö¸¦ ±â¿ïÀδÙ.

 

skew.html

function draw() {

     var img = new Image();

     img.src="hodori.jpg"

     img.onload = function() {

         ctx.transform(1,0,0.3,1,0,0);

         ctx.drawImage(img, 0, 0);

     }

}

 

È£µ¹À̸¦ ¿À¸¥ÂÊÀ¸·Î »ì¦ ±â¿ï¿© ¦´Ù¸® ¤°í ÀÖ´Â °Ç¹æÁø ¸ð½ÀÀ¸·Î ³ªÅ¸³­´Ù.

¾î°¼­ ÀÌ·± ¸ð¾çÀÌ ³ª¿À´ÂÁö´Â Çà·ÄÀ» °öÇØ º¸°í ´ÙÇ×½ÄÀ» µµÃâÇØ º¸¸é ±Ý¹æ ¾Ë ¼ö ÀÖ´Ù.

 

x' = x + y * 0.3;

y' = y;

 

y'´Â º¯È­°¡ ¾øÁö¸¸ x'´Â ¿ø·¡ÀÇ x°ª¿¡ y°ªÀ» 30% ´õÇÑ °ªÀ¸·Î °è»êµÈ´Ù. ±×·¡¼­ y°¡ ¾Æ·¡ÂÊÀ¸·Î Áõ°¡ÇÒ¼ö·Ï x°¡ ºñ·ÊÀûÀ¸·Î À̵¿µÇ¹Ç·Î ¿À¸¥ÂÊÀ¸·Î »ì¦ ±â¿ì´Â °ÍÀÌ´Ù. -0.3À¸·Î ¹Ù²Ù¸é ¿ÞÂÊÀ¸·Î ±â¿ï¾îÁø´Ù. ÀÀ¿ëÀÇ ¿©Áö°¡ ¸¹´Ù´Â °ÍÀÌ Á÷°¨ÀûÀ¸·Î ÀÌÇØµÉ °ÍÀÌ´Ù. ±âÁ¸ÀÇ À̵¿, È®´ë, ȸÀü »Ó¸¸ ¾Æ´Ï¶ó ±â¿ïÀ̱â±îÁö °°ÀÌ Á¶ÇÕÇÏ¸é °¡´ÉÇÑ º¯È¯ÀÇ ¿¹´Â ¹«±Ã¹«ÁøÇÏ´Ù.

¹è¿îÁö ÇÑÂü µÇ¾ú´õ¶óµµ Çà·Ä ¿¬»êÀº ¾î·ÅDzÀÌ ±â¾ï³¯ °ÍÀÌ´Ù. Çà·ÄÀÇ °õ¼À Á¤µµ¸¸ ÀÌÇØÇصµ ÀÌ Ç×ÀÇ ÁÖÁ¦´Â »ó´çÈ÷ Èï¹Ì·Ó°Ô ´Ù°¡¿Ã °ÍÀÌ´Ù. Çà·Ä ¿¬»êÀº Âü Àç¹ÌÀÖ´Ù. ¶ÇÇÑ ±²ÀåÈ÷ °­·ÂÇؼ­ 3Â÷¿ø º¯È¯±îÁöµµ Çà·Ä Çϳª¸é ¾ÈµÇ´Â °Ô ¾ø´Ù.