¸Þ´º Graphics\Algorithms\Bresenham's Algorithms¿¡¼­ bres.txt +----------------------------------------+ | BresenhamÀÇ ¼± ¹× ¿ø ¾Ë°í¸®Áò | +----------------------------------------+ Mark FeldmanÀÌ PC-GPE¸¦ À§ÇØ ÀÛ¼º e-mail address : u914097@student.canberra.edu.au myndale@cairo.anu.edu.au +-------------------------------------------+ | ÀÌ ÆÄÀÏÀº Àüü PC-GPEÆÄÀÏ ¸ðÀ½Áý°ú | | µû·Î ºÐ¸®µÇ¾î ¹èÆ÷µÇ´Â °ÍÀ» ±ÝÇÕ´Ï´Ù. | +-------------------------------------------+ +------------+------------------------------------------------------------ | Æ÷±â¼º¸í¼­ | +------------+ ÀÌ ÆÄÀÏÀÌ ³»ÀûÀ¸·Î Æ÷ÇÔÇϰí Àְųª »ç¿ëÀÌ ¿©·¯ºÐ°ú ¿©·¯ºÐÀÇ Á¤½Å°Ç°­, ÄÄ Ç»ÅÍ, ¹è¿ìÀÚ, ÀÚ³à, ¾Ö¿Ïµ¿¹° µî ±âŸ ¿©·¯ºÐ°ú ¿©·¯ºÐÀÇ Á¸Àç¿Í °ü·ÃµÈ ¸ðµç °Í¿¡ ³¢Ä¡´Â ¿µÇâ¿¡ ´ëÇÑ ±× ¾î´À°Íµµ Àú´Â Ã¥ÀÓÀÌ ¾øÀ½À» °¡Á¤ÇÕ´Ï´Ù. ÀÌ ³»¿ë À¸·Î ÀÎÇØ ÆÄ»ýµÉ ¼ö ÀÖ´Â ¾î¶² º¸Áõµµ Á¦°øµÇÁö ¾Ê½À´Ï´Ù. +-------+----------------------------------------------------------------- | ¼Ò °³ | +-------+ BresenhamÀº »ó´çÈ÷ ¼Ø¾¾ ÁÁÀº ¿©¼ºÀÔ´Ï´Ù.("is"¶ó´Â ´Ü¾îÀÇ »ç¿ëÀ¸·Î º¸¾Æ µè ±â¿¡ ±×°¡ ¾ÆÁ÷ IBM¿¡¼­ ÀÏÇϰí ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.) ÀÌ ÆÄÀÏÀº VGA¿Í °°Àº È­»óÇ¥½ÃÀåÄ¡¿¡ ¼±°ú ¿øÀ» ±×¸®±â À§ÇØ °³¹ßµÈ ¾Ë°í¸®ÁòÀ» ´ã°í ÀÖ½À´Ï´Ù. +-------------------+----------------------------------------------------- | ¼±±×¸®±â ¾Ë°í¸®Áò | +-------------------+ ¼±±×¸®±âÀÇ ±âº» ¾Ë°í¸®Áò ¼öÇàÀº ´ÙÀ½°ú °°½À´Ï´Ù.: o------- + p1 -------- | dy(µ¨Å¸y) ------- p2 | -------o + +----------------------------+ dx(µ¨Å¸x) p1 = (x1,y1), p2 = (x2, y2), x ¿Í y ´Â µÑ´Ù p1¿¡¼­ p2±îÁö Áõ°¡ÇÕ´Ï´Ù. dx = x2 - x1, dy = y2 - y1 and dx >= dy. ¶ó°í Çϸé, ´Ù¸¥ ¸ðµç À¯ÇüÀÇ ¼±µéµµ ÀÌ·± À¯Çü¿¡¼­ ÆÄ»ýµÉ ¼ö ÀÖ½À´Ï´Ù. ³ªÁß¿¡ Á»´õ ÀÚ ¼¼È÷ Çϵµ·Ï ÇÏÁÒ. ¿ì¼± ¿©·¯ºÐÀº ´ÙÀ½ ÃʱâÈ­¸¦ ÇØ¾ßÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.: x = x1 y = y1 d = (2 * dy) - dx x´Â ÇöÀç x À§Ä¡ÀÔ´Ï´Ù. ¸ðµç Á¡µéÀÌ ±×·ÁÁú ¶§±îÁö °¢Á¡À» ±×¸° ÈÄ¿¡´Â ÀÌ º¯ ¼ö¸¦ 1¾¿ Áõ°¡½Ãŵ´Ï´Ù. y´Â ÇöÀç y À§Ä¡ÀÔ´Ï´Ù. ÁõºÐ º¯¼ö(dx, dy)´Â ÀÌ °ªÀ» 1 Áõ°¡½Ãų ¼ø°£À» °áÁ¤ Çϴµ¥ »ç¿ëµË´Ï´Ù. d´Â ¹«¾ùÀ» ÇÏ´ÂÁö ÈçÀûÀ» ³²±â´Âµ¥ »ç¿ëµÇ´Â ÁõºÐ º¯¼öÀÔ ´Ï´Ù.(?) ÀÌÁ¦ ¿©·¯ºÐÀº x1ºÎÅÍ x2±îÁö È­¸éÀ» °¡·ÎÁú·¯ ·çÇÁ¸¦ ½ÇÇàÇÏ°í °¢°¢ÀÇ ·çÇÁ¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº °¢Á¡ÀÇ ¿¬»êÀ» ÇÕ´Ï´Ù.: PutPixel(x, y); { ÇöÀç À§Ä¡¿¡ Á¡À» Âï½À´Ï´Ù. } if d < 0 then d := d + (2 * dy) else begin d := d + 2 * (dy - dx); y := y + 1; end; x := x + 1; °£´ÜÇÏÁÒ! +-------------------------------+----------------------------------------- | ¼±±×¸®±â ¾Ë°í¸®Áò ºü¸£°Ô Çϱâ | +-------------------------------+ Bresenham ¼± ¾Ë°í¸®ÁòÀ» ºü¸£°Ô ÇÏ´Â ¿©·¯ °¡Áö ¾µ¸¸ÇÑ ±â¹ýµéÀÌ ÀÖ½À´Ï´Ù. ¿ì¼± 2¸¦ °öÇÏ´Â ¹ýÀ» °¡¸£Ãĵ帮ÁÒ. À̰ÍÀº °£´ÜÈ÷ ¿ÞÂÊ ºñÆ®À̵¿ ¸í·É¾î·Î ÇØ°áµË´Ï´Ù.(ÆÄ½ºÄ®¿¡¼­´Â Shl À̰í, C¿¡¼­´Â << ÀÔ´Ï´Ù.) ´ÙÀ½ ÁõºÐ º¯¼ö -´õÇØÁö´Â °ª-À» ·çÇÁ¿¡¼­ ¸Å¹ø °è»êÇÏÁö ¸¶¼¼¿ä. ±×·¯´Ï±î ¹Ì ¸® °è»êµÇ¾î ÀÖ¾î¾ß °ÚÁÒ. ¼±ÀÇ ÇѰ¡Áö Ư¼ºÀº ÁßÁ¡¿¡ ´ëÇØ ´ëĪÀ̶ó´Â °ÍÀ̰í, ¿ì¸®´Â ÀÌ Æ¯¼ºÀ» »ì·Á¼­ ¾Ë°í¸®ÁòÀ» ºü¸£°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. µÎ °³ÀÇ x¿Í y°ª (xa, ya)¿Í (xb, yb)¸¦ Àú ÀåÇÕ´Ï´Ù. °¢ ½ÖÀ» ¼±ÀÇ ½ÃÀÛÁ¡°ú ³¡Á¡À¸·Î Àâ½À´Ï´Ù. µÎ Á¡¿¡¼­ Á¡Âï±â¸¦ ¹Ýº¹ ÇÏ¿© ¼±À» ±ß±â À§ÇØ, xa¿¡´Â 1À» ´õÇϰí xb¿¡¼­´Â 1À» »©ÁÝ´Ï´Ù. d >= 0À̸é ya¿¡´Â 1À» ´õÇϰí yb¿¡¼­´Â 1À» »©ÁÝ´Ï´Ù. ±×´ÙÀ½Àº xa = xb°¡ µÉ ¶§±îÁö ¹Ýº¹ ÇÏ´Â Àϸ¸ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ºÐ¸íÇÑ °ÍÀº ¸¸¾à ÁõºÐ º¯¼ö°¡ °°Àº °ªÀÌ µÇ¸é ÃʱâÈ­µÇ¾úÀ»¶§À̸ç, ¼±ÀÇ ³ª¸Ó Áö´Â ´ÜÁö ¿©·¯ºÐÀÌ Á¡À¸·Î ÀÌ¹Ì ´Ù ±×¸° ¼±ÀÌ µË´Ï´Ù. ¿ä·Îºå¿î y¸¦ º¯ÇüÇÏ´Â ¹æ¹ýÀÇ ¹è¿­À» °¡Áö°í ¾Ë°í¸®ÁòÀ» ºü¸£°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, ¸¸¾à ¼±ÀÌ ½º½º·Î ¹Ýº¹ ÇÏ¿© ½ÃÀÛÇÒ °æ¿ì ÀÌ ¹è¿­À» »ç¿ëÇÕ´Ï´Ù. ¸¸¾à ¿©·¯ºÐÀÌ ¸ðµç °ªÀ» ÀúÀåÇϱâ À§ ÇØ Intel ·¹Áö½ºÅ͸¦ »ç¿ëÇÑ´Ù¸é ¾Æ¸¶ ½â ÁÁÀ»¸¸Å­ ºü¸£°Ô ÇÒ ¼ö´Â ¾øÀ» °ÍÀÔ´Ï ´Ù.(»ç½Ç ¼Óµµ°¡ ´õ ´À·ÁÁú °ÍÀÔ´Ï´Ù.) ÇÏÁö¸¸ ¼±Çü ÅØ½ºÃÄ ¸ÅÇΰú °°Àº °ÍÀ» ÇÒ ¶§¿¡´Â À¯¿ëÇϰÚÁÒ.(¾Æ·¡¿¡¼­ ³íÀǵǰí ÀÖ½À´Ï´Ù.) Àú´Â ½ÇÁ¦·Î ÀÌ ±â¹ýÀ» °³¼±ÇÏ·Á°í ÇÏÁö ¾Ê¾Ò°í, ¾î¶² À̰¡ ÇØ³Â´Ù´Â ¼Ò¸®¸¦ µéÀ¸¸é ÁÁ°Ú±º¿ä. ¹«¾ùº¸´Ù ±â¾ïÇÒ °ÍÀº À̵é ÃÖÀûÈ­°¡ Àüü°¡ ¾î¼Àºí¸®·Î ÀÌ·ç¾îÁø´Ù¸é ¼±±×¸® ±â ¾Ë°í¸®ÁòÀÇ ¼Óµµ¸¦ »ó´çÈ÷ ºü¸£°Ô ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ ÆÄÀÏÀÇ ³¡¿¡ ÀÖ´Â ¿¹Á¦ ÇÁ·Î±×·¥µéÀº Á¦°¡ ´À¸° PutPixel ·çƾ¿¡¼­ ¹Ýº¹ ±â¹ý°ú ÁõºÐ º¯¼öÀÇ ºÎÈ£¸¦ ÆÇº°Çϴµ¥ CPU ŸÀ̹ÖÀÇ 40%¸¦ ¼ÒºñÇÕ´Ï´Ù. +-------------------------------+----------------------------------------- | ¼±±×¸®±â ¾Ë°í¸®ÁòÀÇ ´Ù¸¥ ¿ëµµ | +-------------------------------+ ¼±Àº m = dy / dx ÀÏ ¶§, y = mx + cÀÇ ¹æÁ¤½ÄÀ¸·Î Ç¥ÇöµÇ¾îÁý´Ï´Ù. À̰ÍÀº Ç¥ ÁØ ¼±Çü ¹æÁ¤½Ä ax + bx + c = 0ÀÇ º¯ÇüÀÔ´Ï´Ù. ÀÌ ¹æÁ¤½ÄÀ» »ç¿ëÇÏ´Â ¾Ë°í¸®Áò ÀÌ ¸¹½À´Ï´Ù. bresenham ¼±±×¸®±â ¾Ë°í¸®ÁòÀ» »ç¿ëÇϱâ ÁÁÀº °ÍÁß Çϳª´Â »ï°¢Çü°ú °°Àº ¿À ¸ñ ´Ù°¢ÇüÀ» ºü¸£°Ô ä¿ö³Ö±â ÇÏ´Â °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀº È­¸é»ï°¢ÇüÀÇ ¸ðµç ¼öÆò ¼±¿¡ ´ëÇØ ÃÖ¼Ò°ª°ú ÃÖ´ë°ªÀÇ ¹è¿­À» ¼³Á¤ÇÏ¸é µË´Ï´Ù. ±×·± ´ÙÀ½ ´Ù°¢ÇüÀÇ ¸ð µç ¼±À§ÀÇ x°ªÀ» ã¾Æ ÃÖ¼Ò°ª°ú ÃÖ´ë°ªÀÌ ÀûÀýÈ÷ Á¶Á¤µÈ »óÅ¿¡¼­ ´Ù°¢ÇüÀÇ °¢ º¯À» µû¶ó bresenhamÀÇ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¸é µË´Ï´Ù. ¿©·¯ºÐÀÌ ¸ðµç ¼±¿¡ ´ëÇØ ÀÛ¾÷À» ¸¶ÃÆ´Ù¸é °¢°¢ÀÇ ¼±ÀÇ ÃÖ¼Ò°ª°ú ÃÖ´ë°ª»çÀÌÀÇ È­¸é¼öÆò¼±±×¸®±â ·çÇÁ¸¦ Á¾·áÇÕ´Ï´Ù. ¶Ç´Ù¸¥ ¿ëµµ´Â ¼±Çü ÅØ½ºÃÄ ¸ÅÇο¡ ÀÖ½À´Ï´Ù.(PC-GPE ÅØ½ºÃÄ ¸ÅÇΰü·Ã ±â»ç¸¦ ÂüÁ¶) ÀÌ ¹æ¹ýÀº ¹®ÀÚ¿­ ºñÆ®¸Ê Çȼ¿À» »ç¿ëÇÏ°Ô µÇ¸ç, È­¸éÀ§ÀÇ Á¡À¸·Î ±¸¼ºµÈ ¼±À¸·Î Ç¥ÇöµÇ¾îÁý´Ï´Ù. ´ëü·Î È­¸é»óÀÇ ¼öÁ÷¼±À» ±×¸®´Âµ¥ ÀÖ¾î °¢ È­¸é Á¡¿¡ ¼­ ±×·ÁÁö´Â ºñÆ®¸Ê Á¡µéÀ» °è»êÇϴµ¥ BresenhamÀÇ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÒ °ÍÀÔ´Ï ´Ù. +-------------------+----------------------------------------------------- | ¿ø±×¸®±â ¾Ë°í¸®Áò | +-------------------+ ¿øÀº »ó´çÈ÷ ´ëĪÀûÀΠƯ¼ºÀ» °¡Áö°í À־, È­¸é¿¡ Ç¥½ÃÇÒ ¶§ °£ÆíÇÕ´Ï´Ù. |y (ÀÌ µµÇ¥°¡ 50¶óÀÎ ¸ðµå¿¡¼­ º¼¼ö ÀÖ´Â ¿øÀ̶ó°í °¡Á¤Çսà | ´Ù.) \ ..... / . | . ¿ì¸®´Â ¿ø¿¡¼­ 360µµÀÇ °¢ÀÌ ÀÖ´Ù´Â °É ¾Ð´Ï´Ù. ¿ì¼± ¿ì¸®´Â . \ | / . ¿øÀÌ xÃàÀ» ±âÁØÀ¸·Î ´ëĪÀ̶ó´Â Á¡À» ¾Ë ¼ö À־, 180µµ . \|/ . ÀÇ °è»ê¸¸ÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. ´ÙÀ½Àº yÃà¿¡ ´ëÇØ¼­µµ ´ëĪ --.---+---.-- ÀÎ °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¹Ç·Î, ÀÌÁ¦ 90µµ °¢¿¡ ´ëÇÑ °ª¸¸À» °è»ê . /|\ . x ÇÏ¸é µË´Ï´Ù. ¸¶Áö¸·À¸·Î 45µµ ´ë°¢¼± Ãà¿¡ ´ëÇØ ´ëĪÀ̹ǷΠ. / | \ . , 45µµ °¢¿¡ ´ëÇÑ °è»ê¸¸ ÇÏ¸é µÇ°Ú±º¿ä. . | . / ..... \ | | BresenhamÀÇ ¿ø ¾Ë°í¸®ÁòÀº óÀ½ 45µµ °¢µµÀÇ Á¡µéÀÇ À§Ä¡¸¦ °è»êÇÕ´Ï´Ù. ¿øÀº ¿øÁ¡¿¡ Áß½ÉÀ» µÎ°í ÀÖ´Â °ÍÀ¸·Î °¡Á¤ÇÕ´Ï´Ù. µû¶ó¼­ ¸ðµç Á¡ (x,y)¿¡ ´ëÇØ¼­ ¿øÀÇ 8±ºµ¥¿¡ ¿¡ ±×¸± Á¡µéÀ» °è»êÇÕ´Ï´Ù. PutPixel(CenterX + X, Center Y + Y) PutPixel(CenterX + X, Center Y - Y) PutPixel(CenterX - X, Center Y + Y) PutPixel(CenterX - X, Center Y - Y) PutPixel(CenterX + Y, Center Y + X) PutPixel(CenterX + Y, Center Y - X) PutPixel(CenterX - Y, Center Y + X) PutPixel(CenterX - Y, Center Y - X) ±×·³ ½ÇÁ¦ ¾Ë°í¸®ÁòÀ¸·Î µé¾î°¡º¾½Ã´Ù. ÃʱâÈ­¸¦ ÇÒ ¿ø¿¡ ¶óµð¾È°ªÀ» ÁÝ´Ï´Ù.: d := 3 - (2 * RADIUS) x := 0 y := RADIUS ÀÌÁ¦ °¢Á¡¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº ¿¬»êÀ» ÇÕ´Ï´Ù.: 8°³ ¹Ý¿øÀÇ Á¡À» ±×¸³´Ï´Ù. if d < 0 then d := d + (4 * x) + 6 else begin d := d + 4 * (x - y) + 10 y := y - 1; end; ±×¸®°í ¿ì¸®´Â x = y°¡ µÉ ¶§±îÁö À̰ÍÀ» °è¼ÓÇÕ´Ï´Ù. ÀÌ ¾Ë°í¸®Áò¿¡¼­ ÁõºÐ º¯¼ö¿¡ ´õÇØÁö´Â °ª(x¿Í y°ª)Àº °è¼Ó ¹Ù²î¹Ç·Î, ¿ì¸®´Â À̰ÍÀ» ¹Ì¸® °è»êÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¯³ª 4·Î °ö¼ÀÀÌ µÇ¸ç, À̰ÍÀº ºñÆ®¸¦ ¿ÞÂÊÀ¸·Î µÎ ¹ø À̵¿ÇÏ¸é µË ´Ï´Ù. +---------------------+--------------------------------------------------- | ÆÄ½ºÄ® ÀÏ¹Ý ¼± ÇÔ¼ö | +---------------------+ ±âº» BresenhamÀÇ ¼± ¾Ë°í¸®ÁòÀº ¸ðµç À¯ÇüÀÇ ¼±À» ´Ù·çµµ·Ï ¼öÁ¤µÉ ¼ö ÀÖ½À´Ï ´Ù. ÀÌ ºÎºÐÀº dx = abs(x2 - x1)°ú dy = abs(y2 - y1)À» °¡Á¤ÇÕ´Ï´Ù. ¿ì¼± dx >= dyÀÏ ¶§ÀÇ ¼±À» »ç¿ëÇսôÙ. ÀÚ, ¸¸¾à x1 > x2ÀÌ¸é ¿©·¯ºÐÀº ·çÇÁ ¸¦ ½ÇÇàÇÏ´Â ¸ðµç °úÁ¤¿¡¼­ x·ÎºÎÅÍ 1À» »©¾ß ÇÒ °ÍÀÔ´Ï´Ù. ºñ½ÁÇÏ°Ô ¸¸¾à y1 > y2ÀÌ¸é ¶ÇÇÑ d < 0 ÀÏ ¶§ ·çÇÁ¸¦ ½ÇÇàÇÏ´Â ¸ðµç °úÁ¤¿¡¼­ y·ÎºÎÅÍ 1À» »©¾ß ÇÒ °ÍÀÔ´Ï´Ù. dx < dyÀÎ ¼±Àº °°Àº ¹æ¹ýÀ¸·Î ´Ù·ç¾îÁú ¼ö ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀº ¸ðµç dx¿Í dy ÀÇ »óȲÀ» ¹Ù²Ù¸é µË´Ï´Ù. ¸ðµç °æ¿ì¸¦ ´Ù·ç´Â °¡Àå ºü¸¥ ¹æ¹ýÀº °¢°¢ÀÇ 8°³ ¼± À¯ÇüÀ» À§ÇØ ³ª¸§´ë·ÎÀÇ ·çƾÀ» ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù. 1) x1 <= x2, y1 <= y2, dx >= dy 2) x1 <= x2, y1 <= y2, dx < dy 3) x1 <= x2, y1 > y2, dx >= dy 4) x1 <= x2, y1 > y2, dx < dy 5) x1 > x2, y1 <= y2, dx >= dy 6) x1 > x2, y1 <= y2, dx < dy 7) x1 > x2, y1 > y2, dx >= dy 8) x1 > x2, y1 > y2, dx < dy À̰ÍÀº ¿©·¯ºÐ¿¡°Ô °¡Àå ºü¸¥ °á°ú¸¦ °¡Á®´Ù ÁÙ °ÍÀÔ´Ï´Ù¸¸, ¶ÇÇÑ ¿©·¯ºÐÀÇ ÄÚ µå¸¦ 8¹è·Î Ä¿Áö°Ô ¸¸µé°Ú±º¿ä! ¾çÀÚÅÃÀÏ·Î ¿©·¯ºÐÀº ¿©ºÐÀÇ º¯¼ö¸¦ ¼±¾ðÇÏ°í ¸ðµç ¼±¿¡ ´ëÇÑ ÀÏ¹Ý ³»ºÎ ·çÇÁ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.: numpixels = number of pixels to draw = deltax if dx >= dy or = deltay if dx < dy dinc1 = the amount to add to d when d < 0 dinc2 = the amount to add to d when d >= 0 xinc1 = the amount to add to x when d < 0 xinc2 = the amount to add to x when d >= 0 yinc1 = the amount to add to y when d < 0 yinc2 = the amount to add to y when d >= 0 ´ÙÀ½Àº ÀÌ·± ±â¹ýÀ» »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ÀÔ´Ï´Ù. -------------------------------------------------------------------------- { BRESLINE.PAS - Mark Feldman¿¡ ÀÇÇÑ ÀÏ¹Ý ¼±±×¸®±â ÇÔ¼ö À̰ÍÀº ÃÖÀûÈ­°¡ µÇ¾îÀÖÁö ¾ÊÀº bresenhamÀÇ ¼±±×¸®±â ¾Ë°í¸®ÁòÀÇ °¡Àå ´Ü¼øÇÑ º¯ÇüÀÔ´Ï´Ù. À̰ÍÀº ¾ÆÁÖ ¾ÆÁÖ ´À¸° ÆÄ¶ó´ÙÀ̽º È®Àå VGA¸¦ °¡Áø ÀúÀÇ 486SX33 ¿¡¼­ ½ÇÇàÇÒ ¶§ ¸ðµå 13h¿¡¼­ ÃÊ´ç ¾à 6000°³ÀÇ ¹«ÀÛÀ§ ¼±µéÀ» ±×¸± °ÍÀÔ´Ï´Ù. } procedure Line(x1, y1, x2, y2 : integer; color : byte); var i, deltax, deltay, numpixels, d, dinc1, dinc2, x, xinc1, xinc2, y, yinc1, yinc2 : integer; begin { ÃʱâÈ­¸¦ À§ÇÑ deltax¿Í deltay¸¦ °è»êÇÕ´Ï´Ù. } deltax := abs(x2 - x1); deltay := abs(y2 - y1); { µ¶¸³º¯¼ö¿¡ ±âÃÊÇÑ ¸ðµç º¯¼öµéÀ» ÃʱâÈ­ÇÕ´Ï´Ù. } if deltax >= deltay then begin { x ´Â µ¶¸³º¯¼öÀÔ´Ï´Ù. } numpixels := deltax + 1; d := (2 * deltay) - deltax; dinc1 := deltay Shl 1; dinc2 := (deltay - deltax) shl 1; xinc1 := 1; xinc2 := 1; yinc1 := 0; yinc2 := 1; end else begin { y ´Â µ¶¸³º¯¼öÀÔ´Ï´Ù. } numpixels := deltay + 1; d := (2 * deltax) - deltay; dinc1 := deltax Shl 1; dinc2 := (deltax - deltay) shl 1; xinc1 := 0; xinc2 := 1; yinc1 := 1; yinc2 := 1; end; { ¿À¸¥ÂÊ ¹æÇâÀ¸·Î x¿Í y°¡ À̵¿ÇÏ´Â °ÍÀ» È®ÀÎÇϼ¼¿ä. } if x1 > x2 then begin xinc1 := - xinc1; xinc2 := - xinc2; end; if y1 > y2 then begin yinc1 := - yinc1; yinc2 := - yinc2; end; { ¿¡ ±×¸®±â¸¦ ½ÃÀÛÇÕ´Ï´Ù. } x := x1; y := y1; { Á¡µéÀ» ±×¸³´Ï´Ù. } for i := 1 to numpixels do begin PutPixel(x, y, color); if d < 0 then begin d := d + dinc1; x := x + xinc1; y := y + yinc1; end else begin d := d + dinc2; x := x + xinc2; y := y + yinc2; end; end; end; -------------------------------------------------------------------------- ¸¸¾à ¿©·¯ºÐÀÌ (¿¹¸¦ µé¾î) ¸ðµå 13h¸¦ À§ÇÑ ¼±±×¸®±â ·çƾÀ» ÀÛ¼ºÇÑ´Ù¸é ¾î¼À ºí¸®·Î ³»ºÎ ·çÇÁ¸¦ º¯È¯Çؼ­ ¸ðµå 13h ƯÁ¤ Äڵ带 Æ÷ÇÔÇÏ¿© ¼Óµµ¸¦ Áõ°¡½Ãų ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. À̹ø ºÎºÐÀº À§ÀÇ ·çƾ°ú °°ÀÌ ÀÛµ¿ÇÏÁö¸¸ °ªÀº ÇöÀç Á¡ÀÇ ¸Þ¸ð¸® ÁÖ¼Ò¸¦ ´ã´Â ´ÜÀÏ º¯¼ö(È­¸é)¿¡ ÀúÀåµË´Ï´Ù. screeninc1°ú screenc2´Â È­¸éÀÇ °ªÀ» °»½ÅÇÕ´Ï´Ù. -------------------------------------------------------------------------- var screen : word; screeninc1, screeninc2 : integer; . . . { ¿¡ ±×¸®±â¸¦ ½ÃÀÛÇÕ´Ï´Ù. } screen := word(y1) * 320 + x1; screeninc1 := yinc1 * 320 + xinc1; screeninc2 := yinc2 * 320 + xinc2; { Á¡À» Âï½À´Ï´Ù. } asm { °¡´ÉÇÑ ¸¹Àº ·¹Áö½ºÅ͸¦ »ç¿ëÇÕ´Ï´Ù. } push $A000 pop es mov di, screen mov dx, d mov al, color mov cx, numpixels mov bx, dinc1 @bres1: { ÇöÀç Á¡À» Âï°í ÁõºÐº¯¼ö°¡ 0ÀÎÁö¸¦ °Ë»çÇÕ´Ï´Ù. } mov es:[di], al cmp dx, 0 jnl @bres2 { D < 0 } add dx, bx { bx = dinc1 } add di, screeninc1 jmp @bres3 @bres2: { D >= 0 } add dx, dinc2 add di, screeninc2 @bres3: loop @bres1 end; --------------------------------------------------------------------------