1-2-4.¿øÈ£

¿øÀ̳ª ¿øÈ£¸¦ ±×¸± ¶§´Â ´ÙÀ½ ¸Þ¼­µå¸¦ È£ÃâÇÑ´Ù.

 

arc(x, y, r, st, ed, anticlockwise)

 

(x, y)´Â ¿øÀÇ Áß½ÉÁ¡ÀÌ°í rÀº ¹ÝÁö¸§ÀÌ´Ù. st, ed´Â ½ÃÀÛ°¢°ú ³¡°¢Àε¥ °¢µµ´Â ¼¼½Ã ¹æÇâÀ» 0µµ·Î ÇÏ¿© ½Ã°è ¹æÇâÀ¸·Î Áõ°¡ÇÏ´Â ¶óµð¾È °ªÀÌ´Ù. 6½Ã ¹æÇâÀÌ 90µµÀÌ°í 9½Ã ¹æÇâÀÌ 180µµÀÌ´Ù.

¶óµð¾ÈÀº ¹ÝÁö¸§°ú ¿øÁÖ ±æÀÌ°¡ °°¾ÆÁö´Â °¢µµ¸¦ ÀǹÌÇÑ´Ù. ¿ì¸®´Â ¶óµð¾Èº¸´Ù´Â °¢µµ¿¡ ´õ Àͼ÷Çѵ¥ 360ºÐ¹ýÀÇ °¢µµ¸¦ ¶óµð¾ÈÀ¸·Î ¹Ù²Ù·Á¸é ´ÙÀ½ °ø½ÄÀ» »ç¿ëÇÑ´Ù.

 

¶óµð¾È = °¢µµ * Math.PI/180

 

¿ÏÀüÇÑ ¿øÀ» ±×¸®·Á¸é 0µµ ~ 360µµ±îÁö ¿øÈ£¸¦ ±×¸°´Ù. anticlockwise´Â ¿øÈ£ÀÇ ¹æÇâÀ» ÁöÁ¤ÇÑ´Ù. trueÀÌ¸é ¹Ý½Ã°è, falseÀÌ¸é ½Ã°è ¹æÇâÀÌµÇ »ý·«½Ã false°¡ Àû¿ëµÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â 0µµ ~ 120µµ±îÁö ¿øÈ£¸¦ µÎ ¹æÇâÀ¸·Î °¢°¢ ±×¸°´Ù.

 

drawarc.html

function draw() {

     ctx.beginPath();

     ctx.arc(100,100,70,0 * Math.PI / 180, 120 * Math.PI / 180, false);

     ctx.stroke();

 

     ctx.beginPath();

     ctx.arc(300,100,70,0 * Math.PI / 180, 120 * Math.PI / 180, true);

     ctx.stroke();

}

 

½ÃÀÛ°¢°ú ³¡°¢Àº °°Áö¸¸ ¿øÈ£ÀÇ ¹æÇâÀÌ ´Ù¸£´Ù. ¿ÞÂÊ ¿øÀº 0µµ¿¡¼­ ½ÃÀÛÇؼ­ ½Ã°è ¹æÇâÀ¸·Î 120µµ±îÁö µ¹°í ¿À¸¥ÂÊ ¿øÀº 0µµ¿¡¼­ ¹Ý½Ã°è ¹æÇâÀ¸·Î 120µµ±îÁö µ·´Ù. ¹æÇâÀÌ ´Ù¸§À¸·Î ÀÎÇØ ¿øÈ£ÀÇ ±æÀ̵µ ´Ù¸£´Ù.

 

µÎ°³ÀÇ ºÐ¸®µÈ ¿øÈ£À̹ǷΠÆнº¸¦ ºÐ¸®ÇÏ¿© µÎ ¹ø ±×·È´Ù. arc´Â ¼­ºê Æнº°¡ ÀÖÀ¸¸é ÇöÀç À§Ä¡¿Í È£ÀÇ ½ÃÀÛÁ¡À» ¿¬°áÇÑ´Ù. µÎ ¿øÈ£¸¦ °°Àº Æнº¿¡ ³ÖÀ¸¸é ù¹ø° ¿øÈ£ÀÇ ³¡Á¡°ú µÎ¹ø° ¿øÈ£ÀÇ ½ÃÀÛÁ¡ÀÌ ¿¬°áµÇ¾î ¿À¸¥ÂÊ ±×¸²Ã³·³ µÇ¾î ¹ö¸± °ÍÀÌ´Ù.

 

drawarc2.html

function draw() {

     ctx.beginPath();

     ctx.arc(100,100,70,0 * Math.PI / 180, 120 * Math.PI / 180, false);

     ctx.arc(300,100,70,0 * Math.PI / 180, 120 * Math.PI / 180, true);

     ctx.stroke();

}

 

fill ¸Þ¼­µå·Î ¿øÈ£ÀÇ ¾ÈÂÊÀ» ä¿ì¸é ¿øÈ£ÀÇ ¾çÂÊ ³¡ÀÌ ¿¬°áµÇ¾î ¹Ý´Þ ¸ð¾çÀÌ ±×·ÁÁø´Ù. ¿øÈ£ÀÇ ³¡À» ¿øÀÇ Á߽ɰú ¿¬°áÇÏ¿© ÇÇÀÚ ¸ð¾çÀ¸·Î ±×¸®°í ½Í´Ù¸é moveTo ¸Þ¼­µå·Î ½ÃÀÛÁ¡À» ¿øÀÇ Á߽ɿ¡ µÎ°í ¿øÈ£¸¦ ±×·Á ä¿î´Ù. ´ÙÀ½ ¿¹Á¦´Â ¹Ý´Þ°ú ÇÇÀÚ¸¦ ±×¸°´Ù.

 

drawpie.html

function draw() {

     ctx.beginPath();

     ctx.arc(100,100,70,0 * Math.PI / 180, 120 * Math.PI / 180);

     ctx.fill();

 

     ctx.beginPath();

     ctx.moveTo(300,100);

     ctx.arc(300,100,70,0 * Math.PI / 180, 120 * Math.PI / 180);

     ctx.fill();

}

 

¿øÈ£ÀÇ ½ÃÀÛ°¢, ³¡°¢Àº °°´Ù. ù¹ø° ¿øÈ£´Â ¿øÁÖÀÇ ³¡À» ¿¬°áÇؼ­ ´ÝÀ¸¹Ç·Î ¹Ý´Þ ¸ð¾çÀÌ´Ù. µÎ¹ø° ¿øÈ£´Â Áß½ÉÀ¸·Î À̵¿ÇÑ »óÅ·Π±×¸®¹Ç·Î Á߽ɰú ¿øÈ£ ½ÃÀÛÁ¡°ú ¿¬°áµÇ°í fill ¸Þ¼­µå¿¡ ÀÇÇØ ¿øÈ£ ³¡Á¡ÀÌ Á߽ɰú ¿¬°áµÇ¹Ç·Î ÇÇÀÚ ¸ð¾çÀÌ µÈ´Ù.

µÎ¹ø° ¿øÈ£´Â ´ÙÀ½°ú °°ÀÌ ±×·Áµµ ¸¶Âù°¡ÁöÀÌ´Ù. ¿øÁÖ¸¦ ÀÏ´Ü ±×·Á ³õ°í Áß½ÉÁ¡±îÁö ¼±À» ±×À¸¸é ¼±³¡°ú ¿øÁÖ ½ÃÀÛÁ¡Àº fill ¸Þ¼­µå°¡ ¾Ë¾Æ¼­ ¿¬°áÇØ ÁØ´Ù.

 

ctx.beginPath();

ctx.arc(300,100,70,0 * Math.PI / 180, 120 * Math.PI / 180);

ctx.lineTo(300,100);

ctx.fill();

 

¿øÈ£°¡ ¾Æ´Ï¶ó ¿ÏÀüÇÑ ¿øÀ» ±×¸®¸®¸é 0 ~ 360µµ±îÁö ¿øÈ£¸¦ ´Ù ±×¸®¸é µÈ´Ù.

 

drawcircle.html

function draw() {

     ctx.beginPath();

     ctx.arc(200,100,80,0, 2 * Math.PI);

     ctx.stroke();

}

 

360µµ´Â 2 * Math.PI ¶óµð¾ÈÀ̹ǷΠ±»ÀÌ 360 * Math.PI / 180À̶ó°í ¾²Áö ¾Ê¾Æµµ µÈ´Ù. ¿øÁÖ Àüü¸¦ ±×¸®¹Ç·Î ¹æÇâµµ Àǹ̰¡ ¾ø´Ù. ¿ÞÂÊÀ¸·Î µµ³ª ¿À¸¥ÂÊÀ¸·Î µµ³ª ¾îÂ÷ÇÇ ¿ø Àüü°¡ ´Ù ±×·ÁÁø´Ù.

Á¤¿øÀ» ±×¸®´Â ¸Þ¼­µå´Â µû·Î Á¦°øµÇÁö ¾ÊÁö¸¸ arc ÇÔ¼ö¸¦ ·¡ÇÎÇÏ¸é ½±°Ô ¸¸µé ¼ö ÀÖ´Ù. ¿øÀ» ±×¸± ÀÏÀº ¾ÆÁÖ ÈçÇÏ°í ¶Ç ÇÇÀÚ ¸ð¾çÀÇ ÆÄÀ̵µ Á¾Á¾ »ç¿ëµÈ´Ù. ÀÚÁÖ »ç¿ëÇÏ´Â ¸Þ¼­µå°¡ ÀÖ´Ù¸é ÄÁÅؽºÆ®¸¦ È®ÀåÇÏ¿© Á¤ÀÇÇÏ¸é µÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¿øÀÇ ¿Ü°û¼±À» ±×¸®´Â ¸Þ¼­µå¿Í ¿øÀÇ ¾ÈÂÊÀ» ä¿ì´Â ¸Þ¼­µå¸¦ Á¤ÀÇÇÑ´Ù.

 

arcfunc.html

CanvasRenderingContext2D.prototype.strokeCircle = function(x, y, r) {

     this.beginPath();

     this.arc(x, y, r , 0, 2 * Math.PI);

     this.stroke();

}

 

CanvasRenderingContext2D.prototype.fillCircle = function(x, y, r) {

     this.beginPath();

     this.arc(x, y, r , 0, 2 * Math.PI);

     this.fill();

}

        

function draw() {

     ctx.strokeCircle(100, 100, 80);

     ctx.fillCircle(300, 100, 80);

}

 

¸Þ¼­µå À̸§Àº ĵ¹ö½ºÀÇ ´Ù¸¥ ±×¸®±â ¸Þ¼­µå¿Í °°ÀÌ stroke~, fill~·Î ÀÛ¼ºÇÏ¿© ÀÏ°ü¼ºÀ» À¯ÁöÇß´Ù. ÄÁÅؽºÆ®¿¡ ¸Þ¼­µå°¡ Ãß°¡µÇ¹Ç·Î ±âÁ¸ÀÇ ¸Þ¼­µå¿Í µ¿ÀÏÇÑ ¹æ¹ý´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÀåÃà°ú ´ÜÃàÀÌ ´Ù¸¥ Ÿ¿øÀ» ±×¸®´Â ¸Þ¼­µå´Â ´ÙÀ½¿¡ ¹è¿ï º¯È¯ ±â¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ¸¶Âù°¡Áö·Î ÀÚÁÖ »ç¿ëÇÑ´Ù¸é ·¡ÇÎÇØ ³õÀ¸¸é µÈ´Ù. ´ÙÀ½ ¸Þ¼­µå´Â µÎ Á÷¼±¿¡ ³»Á¢ÇÏ´Â ¿øÈ£¸¦ ±×¸°´Ù.

 

arcTo(x1, y1, x2, y2, r)

 

ÀÌ ¸Þ¼Òµå°¡ µ¿ÀÛÇÏ·Á¸é Æнº¿¡ ÇöÀç À§Ä¡°¡ ÁöÁ¤µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ÇöÀç À§Ä¡¸¦ (x0, y0)À̶ó°í ÇÒ ¶§ ÇöÀç À§Ä¡¿¡¼­ (x1, y1)±îÁö °¡»óÀÇ ¼±À» ±ß°í ´Ù½Ã (x2, y2)±îÁö °¡»óÀÇ ¼±À» ±×Àº ÈÄ µÎ ¼±¿¡ ³»Á¢ÇÏ´Â ¹ÝÁö¸§ rÀÇ ¿øÈ£¸¦ ±×¸°´Ù. ±×¸®°í ÇöÀç À§Ä¡¿Í ¿øÈ£ÀÇ ½ÃÀÛÁ¡À» ¿¬°áÇÑ´Ù. µ¿ÀÛÀÌ º¹ÀâÇؼ­ Á÷°üÀûÀ¸·Î ÀÌÇØÇϱ⠾î·Á¿ì¹Ç·Î ¿¹Á¦¸¦ º¸ÀÚ.

 

arcto.html

function draw() {

     ctx.beginPath();

     ctx.moveTo(10, 10);

     ctx.arcTo(100, 150, 200, 10, 40);

     ctx.stroke();

}

 

Æнº¸¦ ½ÃÀÛÇÏÀÚ ¸¶ÀÚ moveTo ¸Þ¼­µå·Î ÇöÀç À§Ä¡¸¦ (10, 10)À¸·Î ÁöÁ¤Çß´Ù. ÇöÀç À§Ä¡°¡ ¾øÀ¸¸é arcTo ¸Þ¼­µå´Â ¾Æ¹« °Íµµ ±×¸®Áö ¾Ê´Â´Ù. (10, 10) - (100, 150) ±îÁöÀÇ Á÷¼±°ú (100, 150) - (200, 10)±îÁöÀÇ Á÷¼±¿¡ ³»Á¢ÇÏ´Â ¹ÝÁö¸§ 40ÀÇ Å¸¿øÀ» ±×¸®°í ÇöÀç À§Ä¡¿Í ¿¬°áÇÑ´Ù.

½ÇÇà °á°ú¸¸ ºÁ¼­´Â ¾ó¸¥ °¨ÀÌ ¿ÀÁö ¾ÊÀ» °ÍÀÌ´Ù. ¾î°¼­ ÀÌ·± ±×¸²ÀÌ ³ª¿À´ÂÁö ÁÂÇ¥¸¦ ºÐ¼®ÇØ º¸ÀÚ.

µÎ Á÷¼±Àº ¿øÈ£ÀÇ ¿ÜÁ¢ ¸ð¾çÀ» °áÁ¤Çϱâ À§ÇÑ °¡»óÀÇ ¾È³»¼±ÀÏ »ÓÀ̹ǷΠÃâ·ÂµÇÁö ¾Ê´Â´Ù. ´Ù¸¸ ÇöÀç À§Ä¡¿Í ¿øÈ£ÀÇ ½ÃÀÛÁ¡Àº ¿¬°áµÇ¹Ç·Î ±×·ÁÁø´Ù. ¸ð¼­¸®°¡ µÕ±Ù »ç°¢ÇüÀ» ±×¸± ¶§ ÀÌ ¸Þ¼­µå¸¦ È°¿ëÇÑ´Ù.

 

roundarc.html

function draw() {

     ctx.beginPath();

     ctx.moveTo(10, 10);

     ctx.arcTo(200, 10, 200, 50, 50);

     ctx.lineTo(200, 100);

     ctx.arcTo(200, 150, 10, 150, 50);

     ctx.lineTo(10,150);

     ctx.stroke();

}

 

ÁÂÇ¥°¡ Á» º¹ÀâÇѵ¥ ¾î¶² ±×¸²ÀÌ ³ª¿ÃÁö Á÷Á¢ ¿¬½ÀÀå¿¡ ±×·Á º¸°í ºÐ¼®ÇØ º¸ÀÚ.

ÀÌ ¸Þ¼­µå¸¦ Àß È°¿ëÇÏ¸é µÕ±Ù »ç°¢ÇüÀ» ±×¸± ¼ö ÀÖ´Ù. 4º¯¿¡ ´ëÇØ arcTo¸¦ ÀÏÀÏÀÌ È£ÃâÇØ¾ß ÇϹǷΠÁÂÇ¥ °è»êÀÌ Á» º¹ÀâÇÏ´Ù. ÀÚÁÖ »ç¿ëÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ·¡ÆÛ ¸Þ¼­µå¸¦ ÀÛ¼ºÇØ µÐ´Ù.

 

roundrect.html

CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) {

     this.beginPath();

     this.moveTo(x+r, y);

     this.arcTo(x+w,y,x+w,y+h,r);

     this.arcTo(x+w,y+h,x,y+h,r);

     this.arcTo(x,y+h,x,y,r);

     this.arcTo(x,y,x+w,y,r);

}

 

CanvasRenderingContext2D.prototype.strokeRoundRect = function (x, y, w, h, r) {

     this.roundRect(x, y, w, h, r);

     this.stroke();

}

 

CanvasRenderingContext2D.prototype.fillRoundRect = function(x, y, w, h, r) {

     this.roundRect(x, y, w, h, r);

     this.fill();

}

 

function draw() {

     ctx.strokeRoundRect(10, 10, 120, 100, 20);

     ctx.fillRoundRect(150, 10, 120, 100, 30);

}

 

¿ÞÂÊ ¸ð¼­¸®¿¡¼­ ½ÃÀÛÇؼ­ ½Ã°è ¹æÇâÀ¸·Î °¢ ²ÀÁöÁ¡À» µ¹¸ç 4º¯À» arcTo ¸Þ¼­µå·Î ¿¬°áÇß´Ù. Æнº¸¦ ¸¸µå´Â ÄÚµå´Â °°°í ÃÖÁ¾ÀûÀ¸·Î È£ÃâÇÒ ¸Þ¼­µå°¡ strokeÀÎÁö fill ÀÎÁö¸¸ ´Ù¸£¹Ç·Î Æнº¸¦ Á¤ÀÇÇÏ´Â º°µµÀÇ µµ¿ì¹Ì ¸Þ¼­µå¸¦ Çϳª ´õ ¸¸µé¾ú´Ù.

arcTo ¸Þ¼­µå´Â Á÷°üÀûÀÌÁöµµ ¾Ê°í »ç¿ëÇϱ⵵ ºÒÆíÇÏ´Ù. µÕ±Ù »ç°¢ÇüÀ» À§Çؼ­¶ó¸é Â÷¶ó¸® À§¿¡¼­ ¸¸µç roundRect ¸Þ¼­µå¸¦ Á¦°øÇÏ´Â °ÍÀÌ ´õ ³º¾ÒÀ» °ÍÀÌ´Ù. ±×·¯³ª arcTo ¸Þ¼­µå¸¦ ±»ÀÌ Á¦°øÇÏ´Â ÀÌÀ¯´Â ÀÌ ¸Þ¼­µå¸¦ ÀÀ¿ëÇÏ¸é µÕ±Ù »ï°¢Çüµµ ±×¸± ¼ö Àֱ⠶§¹®ÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â µÕ±Ù »ï°¢ÇüÀ» ±×¸°´Ù.

 

triangle.html

function draw() {

     ctx.beginPath();

     ctx.moveTo(14,152);

     ctx.arcTo(90, 0, 180, 180, 20);

     ctx.arcTo(180, 180, 0, 180, 20);

     ctx.arcTo(0, 180, 90, 0, 20);

     ctx.stroke();

}

 

¿¹¸¦ º¸À̱â À§ÇØ È£ÀÇ ³¡ ÁÂÇ¥´Â ´«´ëÁßÀ¸·Î ´ëÃæ ³¢¿ö ¸ÂÃß¾úÀ¸¸ç ¸Þ¼­µå·Î Ãß°¡ÇÏÁö´Â ¾Ê¾Ò´Ù. È£ÀÇ ³¡À» Á¦´ë·Î °è»êÇÏ·Á¸é ¾à°£ º¹ÀâÇÑ ¼ö½ÄÀ» µ¿¿øÇØ¾ß ÇÑ´Ù.

ºñ½ÁÇÏ°Ô ÀÀ¿ëÇÏ¸é ¸ð¼­¸®°¡ µÕ±Ù ¿À°¢Çü, À°°¢Çü, ÆÈ°¢Çüµµ ¸¸µé ¼ö ÀÖÀ¸¸ç ³¡ÀÌ ¹¶ÅöÇÑ º°¸ð¾çµµ ¸¸µé ¼ö ÀÖ´Ù. ÀÌ·± ÀÀ¿ëÀÌ °¡´ÉÇϱ⠶§¹®¿¡ arcTo ¸Þ¼­µå°¡ Á¦°øµÇ´Â °ÍÀÌ´Ù.