ºñÀü°ú ÆÐÅÏÀνÄ

(Vision and Pattern Recognition)

 

C ÀΰøÁö´É ÇÁ·Î±×·¡¹Ö : Herbert Schildt ÁöÀ½, ½Å°æ¼÷.·ù¼º·Ä ¿Å±è, ¼¼¿õ, 1991 (¿ø¼­ : Artificial Intelligence using C, McGraw-Hill, 1987), page 215~269

 

1. ÇÊÅ͸µ, ´ëºñ, ¸í¾Ï (FILTERING, CONTRAST, AND SHADING)

     (1) Ä÷¯¿Í Èæ¹é (Color Versus Black-and-White)

2. 2 Â÷¿ø ½Ã½ºÅÛ (TWO-DIMENSIONAL SYSTEMS)

3. 3 Â÷¿ø ½Ã½ºÅÛ (THREE-DIMENSIONAL SYSTEMS)

     (1)  Ç¥¸é ¹æÇâ ã±â (Detecting Surface Direction)

     (2)  Ç¥¸éÀÇ °á °áÁ¤ (Determining Surface Texture)

4. °øÅëµÈ ÀÎ½Ä ¹®Á¦ (COMMON RECOGNITION PROBLEMS)

     (1) °ãÄ¡´Â ¹°Ã¼ (Overlapping Objects)

     (2) ºÐ·ù¿¡ ÀÇÇÑ ¹°Ã¼ÀÎ½Ä (Recognition of Objects by Classification)

     (3) ´«ÀÇ Âø°¢ (Optical Illusions)

5. 2 Â÷¿ø ÆÐÅÏÀÎ½Ä (TWO-DIMENSIONAL PATTERN RECOGNITION)

     (1) »óȲ (The Situation)

     (2) ºñµð¾î ¿µ»ó ½Ã¹Ä·¹ÀÌÆ® (Simulation a Video Image)

     (3) °¢¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ (The Recognition-by-Angle Program)

     (4) ÁÖ¿ä Á¡µé¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ (The Recognition-by-key-Points Program)

     (5) µ¨Å¸-D Àνıâ (The Delta-D Recognizer)

6. ÀϹÝÈ­µÈ ½Ã½ºÅÛ (GENERALIZED SYSTEMS)

 

ÄÄÇ»ÅÍ°¡ Àΰ£¼¼°è¿Í ¿ÏÀüÈ÷ »óÈ£ÀÛ¿ë (interface) ÇÏ·Á¸é, ºÐ¸íÈ÷ ¾î¶² Á¾·ùÀÇ ºñÀü ´É·ÂÀÌ ¿ä±¸µÈ´Ù. ÀÚµ¿ ·Îº¿ÀÇ °æ¿ì¿¡ ºñÀüÀº Çʼö ºÒ°¡°áÇÏ´Ù. ÅÚ·¹ºñÀü Ä«¸Þ¶óÀÇ ½ÅÈ£¸¦ µðÁöÅÐÈ­ ÇÏ´Â °úÁ¤ÀÌ ºñ·Ï AI ÀÇ ÀϺδ ¾Æ´ÏÁö¸¸, ±× ½ÅÈ£¸¦ Çؼ®ÇÏ´Â °úÁ¤Àº AI ÀÇ ÀϺÎÀÌ´Ù. ÀÌ Àå¿¡¼­ º¸¿©ÁÙ °Íó·³, ÄÄÇ»ÅÍ°¡ ±×·± ½ÅÈ£µéÀ» Çؼ®ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¿©·¯ °¡Áö ÀÖ´Ù.

ÄÄÇ»ÅÍ¿¡ ºñÀü ½Ã½ºÅÛÀÌ ¿¬°áµÇ¾î ÀÖÁö ¾Ê´õ¶óµµ °ü°è¾ø´Ù. ÀÌ Àå¿¡ ÀÖ´Â ¾î¶² ¿¹¸¦ À§Çؼ­µµ ÇÊ¿äÄ¡ ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ ÀåÀº ÅÚ·¹ºñÀü ½ÅÈ£¸¦ ½ÇÁ¦·Î Àâ´Â °ÍÀ» ´Ù·ç´Â °ÍÀÌ ¾Æ´Ï¶ó ¿©·¯ °¡Áö ÆÐÅÏÀÇ ÀνÄÀ» ´Ù·ç±â ¶§¹®¿¡, ¿¹·Î½á µðÁöÅÐÈ­µÈ ½ÅÈ£¸¦ ½Ã¹Ä·¹ÀÌÆ® ÇÒ °ÍÀÌ´Ù.

Á¾Á¾, ¿µ»óó¸® (image processing) ¶ó´Â ¿ë¾î´Â ºñÀü, ÆÐÅÏÀνÄ, ¿µ»ó°­È­ (image enhancement) ¶ó´Â ²Ï ³ÐÀº ºÐ¾ß¸¦ ¶æÇÑ´Ù. ±× ºÐ¾ß°¡ ±×·¸°Ô Å« ÀÌÀ¯´Â µÎ°¡Áö ÁÖ¿ä ºÎºÐÀ» ¸Á¶óÇϱ⠶§¹®Àε¥, ù ¹ø° ºÎºÐÀº 2 Â÷¿ø ó¸®ÀÌ°í µÎ ¹ø° ºÎºÐÀº ÈçÈ÷ ½Ç¼¼°è 󸮷ΠºÒ¸®¿ì´Â 3 Â÷¿ø ó¸®ÀÌ´Ù. ¿©·¯ °¡Áö ¹°Ã¼¸¦ ÀνÄÇÒ C ÇÁ·Î±×·¥À» °³¹ßÇϱâ Àü¿¡ ¸î°¡Áö ÁÖ¿äÇÑ ÁÖÁ¦¿Í, ¿µ»óó¸®¿Í ÆÐÅÏÀνÄÀÇ ¹®Á¦¿¡ ´ëÇÑ °³¿ä¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù.

1. ÇÊÅ͸µ, ´ëºñ, ¸í¾Ï (FILTERING, CONTRAST, AND SHADING)

ÀϹÝÀûÀ¸·Î ºñÀü ½Ã½ºÅÛÀ» ±¸ÇöÇÏ´Â µ¥´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. ù ¹ø° ¹æ¹ýÀº ¿µ»óÀ» °¢ ¹°Ã¼ÀÇ ¿ÜÇüÀ» ÀÌ·ç´Â ¼±¿¡¼­ µµÃâÇØ ³»·Á°í ÇÑ´Ù. ÀÌ ¹æ¹ýÀº ¿µ»óÀ¸·ÎºÎÅÍ Á¤º¸¸¦ Á¦°ÅÇϱâ À§ÇØ ¿©·¯ °¡Áö ÇÊÅÍ¿Í, ¿µ»óÀÇ ¸ðµç ºÎºÐÀ» °Ë°Å³ª Èñ°Ô ¸¸µé±â À§ÇÏ¿© ´ëºñ °­È­±â (contrast enhancer) ¸¦ »ç¿ëÇÑ´Ù. ÀÌ°ÍÀº ȸ»ö Áö¿ªÀÌ ¾ø±â ¶§¹®¿¡ - ¿µ»óÀÇ ¸ðµç Á¡ÀÌ °Ë°Å³ª Èñ´Ù - ¶§¶§·Î ÀÌÁø¿µ»ó (binary image) À̶ó°í ºÎ¸¥´Ù.

ÀÌÁø ¿µ»óÀÇ ½ÇÁ¦ »ý¼ºÀº ÀϹÝÀûÀ¸·Î ¿µ»óÀÇ ¾î¶² Çؼ®¿¡µµ °ü°èÄ¡ ¾Ê´Â ¼±Çà󸮱â (preprocessor) ¿¡ ¸Ã°ÜÁø´Ù. ±×·¯ÇÑ ÇÊÅ͸µÀÌ ºñ·Ï µðÁöÅÐÇüÀ¸·Î ÇàÇØÁú ¼ö ÀÖÁö¸¸, ÅÚ·¹ºñÀü ¼ö»ó±â¿¡¼­ ±¤µµÁ¶Àý (brightness control) À» ÁÙÀÌ´Â µ¿¾È ³»³» ´ëºñ Á¶ÀýÀ» ³ôÀÏ ¶§ º¸´Â °Í°ú À¯»çÇÑ °í´ëºñ (high-contrast) ¿µ»óÀ» »ý¼ºÇÏ´Â ¾Æ³¯·Î±× ȸ·Î¸¦ »ç¿ëÇÏ¿© °£´ÜÇÑ ½Ã½ºÅÛÀ¸·Î ½ÇÇàÇÑ´Ù. ±×·¯³ª, ÀÌ Àå¿¡¼­´Â ¿µ»ó°­È­¿¡ ´ëÇؼ­´Â ¼³¸íÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.

ÀÌÁø¿µ»óÀÇ ÀåÁ¡Àº, ¸Å¿ì °£´ÜÇÑ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© ÄÄÇ»ÅÍ°¡ ½±°Ô ÀνÄÇÒ ¼ö ÀÖ´Â, ¾ö¹ÐÈ÷ Á¤ÀÇµÈ °æ°è¸¦ Á¦°øÇÏ´Â Á¡ÀÌ´Ù. ´Ù½Ã ¸»Çؼ­, °¢ ¹°Ã¼°¡ ¾îµð¼­ ½ÃÀÛÇÏ°í ³¡³ª´ÂÁö ¸íÈ®ÇÏ´Ù. °í´ëºñ ¿µ»óÀº, ´Ü ¸î °³ÀÇ ¼±ÅÃµÈ ¹°Ã¼µé¸¸ °üÂûµÉ °ÍÀ̶ó°í ¹Ì¸® ¾Ë·ÁÁø Á¶ÀýµÈ ȯ°æ¿¡¼­ ÈçÈ÷ »ç¿ëµÈ´Ù. ´ëºÎºÐ, ÀÌ°ÍÀº ÀÌÂ÷¿ø ¿µ»óó¸® ½Ã½ºÅÛÀÌ »ç¿ëÇÏ´Â ±¸Çö À¯ÇüÀÌ´Ù.

ºñÀü ½Ã½ºÅÛÀ» ±¸ÇöÇÏ´Â µÎ ¹ø° ¹æ¹ýÀº ÄÄÇ»ÅÍ¿¡°Ô »ç¶÷ÀÌ º¸´Â °Í°ú Á» ´õ ºñ½ÁÇÑ ¿µ»óÀÇ ¸ð½ÀÀ» ÁÖ·Á°í ½ÃµµÇÑ´Ù. ÀÌ ¹æ¹ýÀº ¿µ»ó ÀϺÎÀÇ ±¤µµ (brightness) ¿¡ ´ëÇÑ Á¤º¸¸¦ ÄÄÇ»ÅÍ¿¡ ÁØ´Ù. ÀÌ°ÍÀº ÄÄÇ»ÅÍ·Î ÇÏ¿©±Ý °í´ëºñ ¿µ»ó¿¡¼­ °¡´ÉÇÏÁö ¾ÊÀº ¿µ»óÀ¸·ÎºÎÅÍ µÎ °¡Áö Áß¿äÇÑ Æ¯Â¡ - Ç¥¸é(surface) °ú ±×¸²ÀÚ(shadow) - À» µµÃâÇØ ³¾ ¼ö ÀÖ°Ô ÇÑ´Ù. ÄÄÇ»ÅÍ´Â ¿µ»ó¿¡ ´ëÇÑ 3 Â÷¿ø Á¤º¸¸¦ Á¦°øÇϱâ À§Çؼ­, ±×¸®°í ÇÑ ¹°Ã¼°¡ ºÎºÐÀûÀ¸·Î ´Ù¸¥ ¹°Ã¼¸¦ °¡¸± ¶§ Ãæµ¹ (conflict) ¸¦ ÇØ°áÇϱâ À§Çؼ­ ÀÌ·± °ÍµéÀ» »ç¿ëÇÑ´Ù. ÀÌ·± À¯ÇüÀÇ ¿µ»óÈ­ (imaging) ´Â º¸Åë 3 Â÷¿ø ºñÀü ½Ã½ºÅÛ¿¡¼­ »ç¿ëÇÑ´Ù.

(1) Ä÷¯¿Í Èæ¹é (Color Versus Black-and-White)

½ÇÁ¦·Î ¸ðµç ºñÀü ½Ã½ºÅÛÀº µÎ °¡Áö ÀÌÀ¯ ¶§¹®¿¡ Ä÷¯ ´ë½Å Èæ¹é ¿µ»óÀ» »ç¿ëÇÑ´Ù : ù°, Ä÷¯´Â ÀϹÝÀûÀ¸·Î ÇÊ¿äÇÏÁö ¾Ê°í, µÑ°, Ä÷¯ Á¤º¸¸¦ ÷°¡ÇÏ´Â °ÍÀº ¿µ»óÀ» ó¸®ÇÏ°í ÀÖ´Â ÄÄÇ»ÅÍ¿Í ¼ÒÇÁÆ®¿þ¾î¿¡ ÈξÀ ´õ Å« ¿ä±¸¸¦ ÇÑ´Ù. ºñÀü ±â¼úÀÇ ÇöÀç »óÅ (current) ¿Í ±â´ë »óÅ (expect) °¡ ÁÖ¾îÁ³À» ¶§, ÀÌ »óȲÀº ½±°Ô ¹Ù²ð °Í °°Áö ¾Ê´Ù. ±×·¯¹Ç·Î ÀÌ Àå¿¡¼­´Â ¸ðµç ¿µ»óÀÌ Èæ¹éÀ̶ó°í °¡Á¤ÇÑ´Ù.

2. 2 Â÷¿ø ½Ã½ºÅÛ (TWO-DIMENSIONAL SYSTEMS)

2 Â÷¿ø ºñÀü ½Ã½ºÅÛÀº ¸ðµç ¿µ»óÀÌ ÆíÆòÇÑ °Íó·³ ó¸®Çϱ⠶§¹®¿¡ ¾ö¹ÐÈ÷ Á¶ÀýµÇ°í Á¦ÇÑµÈ È¯°æÀ» ¿ä±¸ÇÑ´Ù. »ç½Ç»ó, 2 Â÷¿ø ¿µ»ó󸮴 ÀÌ ÀÌÀ¯ ¶§¹®¿¡ ¶§¶§·Î ÆíÆòÇÑ ¿µ»ó (flat image) 󸮶ó°í ºÎ¸¥´Ù. ´Ü 2 Â÷¿ø¸¸ÀÌ Ç¥ÇöµÇ±â ¶§¹®¿¡, °í´ëºñ ÀÌÁø ¿µ»óÀÌ ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Âµ¥, ÀÌ°ÍÀº ¹°Ã¼ÀÇ ¿ÜÇü¸¸À» À̲ø¾î ³½´Ù. 2 Â÷¿ø ½Ã½ºÅÛÀº ¾î¶² ƯÁ¤ÇÑ 2 Â÷¿ø ¸ð¾çÀÇ ¹æÇâ (orientation), À§Ä¡ (location) ¶Ç´Â ÀνÄÀÌ Áß¿äÇÑ ÀÚµ¿È­µÈ ÀÛ¾÷ ¶óÀΰú °°Àº ȯ°æ¿¡¼­ ¾ÆÁÖ ÈçÈ÷ ¾²ÀδÙ.

±×¸² 1  2 Â÷¿ø ºñÀü Á¦¾î Á¤·Ä ¶óÀÎ

°üÂûµÇ´Â ½ÇÁ¦ ¹°Ã¼´Â ÆíÆòÇÒ ÇÊ¿ä°¡ ¾ø°í º¸Åë 3 Â÷¿øÀ̶ó´Â °ÍÀ» ¸í½ÉÇØ¾ß ÇÑ´Ù. ½Ã½ºÅÛÀÇ À¯ÀÏÇÑ ¿ä±¸»çÇ×Àº 3 Â÷¿ø ¿µ»óÀÌ ±× ÁÖü (identity) ¸¦ ÀÒÁö ¾Ê°í 2 Â÷¿ø ¿µ»óÀ¸·Î º¯Çü (reduce) µÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¿¹¸¦µé¾î, ´Ü ³×°¡Áö À¯ÇüÀÇ ºí·Ïµé¸¸ Á¦Á¶ÇÏ´Â Àå³­°¨ °øÀåÀ» »ó»óÇØ º¸ÀÚ - Á¤»ç°¢Çü, Á÷»ç°¢Çü, »ï°¢Çü°ú ¿ø±âµÕ, ºí·ÏÀÌ ¸¸µé¾î Áú ¶§, ÀÚµ¿ Á¤·Ä (automated sorting) À» À§ÇÑ ÄÁº£ÀÌ¾î º§Æ®À§¿¡ ³õ¿©Áø´Ù. ÄÁº£ÀÌ¾î º§Æ®À§¿¡ ÀåÄ¡µÈ (mounted) ÅÚ·¹ºñÀü Ä«¸Þ¶ó´Â °¢ ºí·ÏÀÇ 2 Â÷¿øÀû, À§¿¡¼­ º» ¿µ»óÀ» ÄÄÇ»ÅÍ¿¡ °ø±ÞÇÑ´Ù. °¢ ºí·ÏÀÌ ¾î¶² À¯ÇüÀÌ°í, °¢ ºí·ÏÀÌ ÇöÀçÀÇ Æ²¼Ó¿¡ ¾î¶² ¼ø¼­·Î ³õ¿© ÀÖ´ÂÁö¸¦ °áÁ¤ÇÑ´Ù. ±×¸² 1 ÀÌ ÀÌ »óȲÀ» ¼³¸íÇÑ´Ù.

°¢ ºí·ÏÀÌ Áö³ª°¨¿¡ µû¶ó, Ä«¸Þ¶ó´Â ºí·ÏÀÇ 3 Â÷¿ø ¸ð½ÀÀ» À­ºÎºÐÀÇ ¸ð¾çÀ» Çü¼ºÇÏ´Â 2 Â÷¿øÀ¸·Î º¯Çü½ÃŲ´Ù. ±×¸² 2 ´Â ÄÄÇ»ÅÍ°¡ º¸´Â ¿µ»óÀ» º¸¿©ÁØ´Ù. ºñ·Ï ÇÑ Â÷¿ø Àüü°¡ Á¦°Å µÇ¾úÁö¸¸, ÄÄÇ»ÅÍ´Â °¢ ºí·ÏÀ» ¿Ã¹Ù·Î ÀνÄÇϱâ À§Çؼ­ ¿©ÀüÈ÷ ÃæºÐÇÑ Á¤º¸¸¦ °®´Â´Ù.

±×¸² 2  ÄÄÇ»ÅÍ°¡ º» ºí·Ï

°üÂûµÈ ¹°Ã¼´Â ¾ö°ÝÈ÷ ÅëÁ¦ (control) µÇ°í ±×µéÀÇ º¯ÇüÀº ¹ß»ýÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ °£´ÜÇÑ 2 Â÷¿ø ¿µ»ó󸮱âÀÇ ¼º°ø¿¡ ±âº»ÀÌ µÊÀ» ¸í½ÉÇØ¾ß ÇÑ´Ù. ¿¹¸¦µé¾î, ¸¸¾à ºí·Ï ºÐ·ù±â (sorter) ¿¡ Á¤»ç°¢Çü ¹Ù´ÚÀ» °¡Áø ÇǶó¹ÔÀ» ³Ö¾ú´Ù¸é, 2 Â÷¿ø ¿µ»óÀº Á¤»ç°¢ÇüÀ¸·Î ³ªÅ¸³ª°í, ÄÄÇ»ÅÍ´Â ±×°ÍÀ» Á¤»ç°¢Çü ºí·ÏÀÇ Åë ¼Ó¿¡ ³õÀ» °ÍÀÌ´Ù. ±×·¯ÇÑ ÇǶó¹ÔÀ» ÀνÄÇÏ´Â °ÍÀÌ ÇÊ¿äÇØÁö¸é, Ä«¸Þ¶óÀÇ À§Ä¡¸¦ ¹Ù²Ù°Å³ª Ãø¸é °üÂûÀ» À§Çؼ­ µÎ ¹ø°ÀÇ 2 Â÷¿ø ½Ã½ºÅÛÀ» ÷°¡ÇØ¾ß ÇÒ °ÍÀÌ´Ù.

2 Â÷¿ø ½Ã½ºÅÛÀÌ °®´Â °øÅëµÈ ¹®Á¦Á¡Àº ¹°Ã¼°¡ ´Ù¸¥ ¹°Ã¼¿¡ ÀÇÇØ ºÎºÐÀûÀ¸·Î °¡·ÁÁö°Å³ª µ¤¿©Á® ÀÖÀ» ¶§ ½Ã½ºÅÛÀº ±× ¹°Ã¼¸¦ ÀνÄÇÏ´Â µ¥¿¡ ¾î·Á¿òÀ» °®´Â´Ù´Â °ÍÀÌ´Ù. À¯¿ëÇÑ 3 Â÷¿ø Á¤º¸°¡ ¾ø±â ¶§¹®¿¡ Ä«¸Þ¶ó´Â Ãæµ¹µÇ°Å³ª À߸øµÈ Á¤º¸¸¦ ÄÄÇ»ÅÍ¿¡ ³Ö´Â´Ù. ±×·¯ÇÑ Ãæµ¹À» ¿Ã¹Ù·Î ÇØ°áÇÏ´Â °ÍÀÌ Ç×»ó °¡´ÉÇÑ °ÍÀº ¾Æ´Ï´Ù. ³ªÁß¿¡ Á¦½ÃµÈ ÇÁ·Î±×·¥¿¡¼­ º¸°ÚÁö¸¸, ÀÎ½Ä ·çƾÀÌ ±¸ÇöµÇ´Â ¹æ¹ýÀº ÄÄÇ»ÅÍ°¡ ¾î¶² À¯ÇüÀÇ »óȲÀ» ´Ù·ê ¼ö ÀÖÀ»Áö¸¦ Á¦¾îÇÑ´Ù. ÀÌ ¹®Á¦¸¦ ÀÌÇØÇϱâ À§Çؼ­, »ï°¢ ¸ð¾çÀÇ ºí·ÏÀÌ ¿ì¿¬È÷µµ Á¤»ç°¢Çü ºí·ÏÀÇ À§¿¡ ³õ¿´´Ù°í »ý°¢ÇØ º¸ÀÚ. ÄÄÇ»ÅÍ´Â ´ÙÀ½ ¸ð¾çÀ» º¸°ÔµÈ´Ù.

ÄÄÇ»ÅÍ´Â ÀÌ ¿µ»óÀÌ »ç°¢ ¸ð¾çÀ» Çü¼ºÇÏ´Â, ¼­·Î ÀÌ¿ôÇÏ´Â µÎ °³ÀÇ »ï°¢ÇüÀ¸·Î ÀÌ·ç¾îÁø °ÍÀÎÁö ¶Ç´Â »ç°¢ÇüÀÇ À§¿¡ ³õÀÎ »ï°¢ÇüÀÎÁö ±¸º°ÇÒ ¼ö°¡ ¾ø´Ù. ±×·¯ÇÑ ¹®Á¦ ¶§¹®¿¡ 3 Â÷¿ø ¿µ»óÈ­¸¦ »ç¿ëÇÏ°Ô µÈ´Ù.

3. 3 Â÷¿ø ½Ã½ºÅÛ (THREE-DIMENSIONAL SYSTEMS)

±âº»ÀûÀ¸·Î, 3 Â÷¿ø ºñÀü ½Ã½ºÅÛÀº ´Ù¸¥ ¹°Ã¼ÀÇ Á¤¸éÀ̳ª À­ºÎºÐ¿¡¼­ ¹æÇØÇÏ´Â ¹°Ã¼µé¿¡ ÀÇÇØ »ý¼ºµÇ´Â ¸ðµç °üÂû ¹®Á¦¸¦ ´Ù·ç·Á°í ÇÑ´Ù. 3 Â÷¿ø ½Ã½ºÅÛÀ» ¶ÇÇÑ ÄÄÇ»ÅÍ ÇÁ·Î±×·¥ÀÌ ±¹°¡ÀÇ Áö±¸¹°¸®ÇÐÀû Áöµµ¸¦ »ý¼ºÇÏ´Â °ÍÀ» µ½´Â ÀÏ°ú °°Àº, ÇÑ ¿µ»óÀ¸·ÎºÎÅÍ ÁöÇüÇÐÀû Á¤º¸¸¦ ÃßÃâÇØ ³»·Á°í ÇÑ´Ù. 3 Â÷¿ø ¿µ»ó󸮴 ÇÁ·Î±×·¡¸Ó°¡ 3 Â÷¿ø ºñÀü ½Ã½ºÅÛÀ» ±¸ÇöÇÒ ¼ö ÀÖ±â Àü¿¡ ±Øº¹µÇ¾î¾ß ÇÒ ½ÇÁúÀûÀÎ ¹®Á¦µéÀÌ Àֱ⠶§¹®¿¡ AI ±â¼úÀÇ ÃÖÀü¼±¿¡ ÀÖ´Ù.

ÇϳªÀÇ Ä«¸Þ¶ó¸¦ °®´Â ºñÀü ½Ã½ºÅÛÀÌ 3 Â÷¿ø Á¤º¸¸¦ ¿ä±¸ÇÏ´Â ¸¹Àº ÀÀ¿ë¿¡ ÃæºÐÇÏ´Ù´Â °ÍÀ» ¾Ë¸é ³î¶öÁöµµ ¸ð¸¥´Ù. ±× ÀÌÀ¯¸¦ ÀÌÇØÇϱâ À§Çؼ­, Àá½Ã ÇÑ ´«À» °¨°í µÑ·¯º¸¶ó. ÁÖÀ§ÀÇ ¹°Ã¼µéÀ» ¿©ÀüÈ÷ ½±°Ô ÀνÄÇÒ ¼ö ÀÖ´Ù. ÀÌ ÀÌÀ¯´Â ¼³¸íÇϱ⿡´Â °£´ÜÇÏÁö¸¸ ÄÄÇ»ÅÍ¿¡¼­ ±¸ÇöÇϱâ´Â ¾î·Æ´Ù. ½Ã·Â (vision) Àº ´Ü¼øÈ÷ ¹°Ã¼ÀÇ °æ°è¼±º¸´Ù ÈξÀ ´õ ¸¹Àº Á¤º¸¸¦ Æ÷ÇÔÇϱ⠶§¹®¿¡ ¿©ÀüÈ÷ ÇÑ ´«¸¸À¸·Î º¼ ¼ö ÀÖ´Ù. »ö, ¸í¾Ï (shading), ±¤µµ (brightness) ±×¸®°í °Å¸®¿¡ ´ëÇÑ Á¤º¸¸¦ °®´Â´Ù. µÎ ´«À» »ç¿ëÇÑ ½Ã·ÂÀÇ ¼Õ½ÇÀ» º¸»óÇϱâ À§Çؼ­ (ÃÖ¼ÒÇÑ ºÎºÐÀûÀ¸·Î) ´Ù¸¥ Á¤º¸¿¡ ÀÇÁ¸ÇÒ ¼ö Àֱ⠶§¹®¿¡ ÇÑ ´«¸¸À¸·Î ¼¼°è¿¡ ´ëÇÑ 3 Â÷¿ø °üÁ¡À» ¿©ÀüÈ÷ °®°Ô µÈ´Ù. ÀÌ ¼³¸íÀÇ ³ª¸ÓÁö ºÎºÐ¿¡¼­ ´Ü ÇϳªÀÇ Ä«¸Þ¶ó¸¸ »ç¿ëµÈ´Ù°í °¡Á¤ÇÑ´Ù.

3 Â÷¿ø ½Ã½ºÅÛÀº Á¦ÇÑµÈ 2 Â÷¿ø ¹æ½Ä¿¡¼­ Á¸ÀçÇÏÁö ¾Ê¾Ò´ø ¿©·¯ °¡Áö ¹®Á¦¸¦ ±Øº¹ÇØ¾ß ÇÑ´Ù. ¸ÕÀú, ÄÄÇ»ÅÍ°¡ ó¸®ÇÏ´Â ¿µ»óÀº ÈξÀ ´õ ¸¹Àº Á¤º¸¸¦ °®´Â´Ù. ÀÌ°ÍÀº ´Ü¼øÇÑ ¸»Ã³·³ µé¸®Áö¸¸, Àá½Ã ±×°Í¿¡ ´ëÇÏ¿© »ý°¢ÇØ º¸ÀÚ : °í´ëºñ ÀÌÁø ¿µ»ó¿¡¼­, ÄÄÇ»ÅÍ´Â °¢ Çȼ¿ (pixel) ÀÌ °ËÀº »öÀ̰ųª Èò»öÀ̱⠶§¹®¿¡ ±×°ÍÀ» ÇÑ ºñÆ®¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Ù (Çȼ¿Àº ºñµð¿À ¿µ»óÀÇ ÇÑ Á¡ÀÌ´Ù). ±×·¯³ª 3 Â÷¿ø Á¤º¸¸¦ ¾ò´Â °ÍÀº °¢ Çȼ¿ÀÇ »ó´ëÀûÀÎ ±¤µµ¿¡ ´ëÇÑ Á¤º¸¸¦ ¿ä±¸ÇÑ´Ù. ¿©·¯ Á¦¾àÁ¶°Ç¿¡ µû¶ó¼­, ¸î °³ÀÇ °­µµ¿¡¼­ ¼ö¹é °³ÀÇ ±¤µµ±îÁö ÀÖÀ» ¼ö ÀÖ´Ù. 256 °¡Áö ȸ»öÀÇ ¸í¾ÏÀÌ ÀÖ°í °¢ Çȼ¿À» ÀúÀåÇϱâ À§ÇØ 1 ¹ÙÀÌÆ®¸¦ ¿ä±¸ÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ÀÌ ¼ýÀÚ´Â °í´ëºñ ¹æ¹ý¿¡ ÀÇÇØ ¿ä±¸µÇ´Â °Íº¸´Ù 8 ¹è ¸¹´Ù. ¾ó¸¶³ª ¸¹Àº ±â¾ïÀå¼Ò°¡ ¿ä±¸µÇ´ÂÁö ¾Ë±â À§ÇØ, ´ÙÀ½À» »ý°¢ÇØ º¸ÀÚ : º¸ÅëÀÇ ¹Ì±¹ ÅÚ·¹ºñÀü Ä«¸Þ¶ó´Â 525 °³ÀÇ ½ºÄµ¶óÀÎÀ» »ç¿ëÇÏ°í, µ¿ÀÏÇÑ ¼öÆò Çػ󵵸¦ °¡Á¤Çϸé, Èæ¹é »çÁøÀ» ÀúÀåÇÏ´Â µ¥¿¡ 275,625 ¹ÙÀÌÆ®°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù (¸¸¾à Ä÷¯ ¿µ»óÀ» ÀúÀåÇϱ⠿øÇÑ´Ù¸é ¿ä±¸µÈ ±â¾ïÀå¼ÒÀÇ ¾çÀº °ÅÀÇ µÎ ¹è°¡ µÉ °ÍÀÌ´Ù !). ´ëºÎºÐÀÇ °³Àοë ÄÄÇ»ÅÍ°¡ À̸¸Å­ÀÇ ¸Þ¸ð¸®¸¦ ½±°Ô °¡Áú ¼ö ÀÖÁö¸¸, ÄÄÇ»ÅÍ°¡ ¼ÒÈ­ÇÒ ¸¹Àº Á¤º¸¸¦ Ç¥ÇöÇÏ°í, °í´ëºñ ¸ðµå¿¡¼­ÀÇ ¿µ»ó°ú ¹Ý´ëµÇ°Ô ÀÌ·± ÇüÅ·Π¿µ»óÀ» ºÐ¼®ÇÏ´Â µ¥¿¡´Â ´õ ¸¹Àº ½Ã°£ÀÌ °É¸±¼ö ÀÖ´Ù. ½Ç½Ã°£ ÀÀ¿ë¿¡¼­, ÀÌ°ÍÀº ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.

´õ Áß¿äÇÑ ¹®Á¦´Â ¿µ»óÀÌ °®´Â ¸ðµç Á¤º¸¸¦ ÄÄÇ»ÅÍ·Î ÇÏ¿©±Ý »ç¿ëÇÏ°Ô ÇÏ·Á°í ÇÒ ¶§ ¹ß»ýÇÑ´Ù. º»´ÉÀûÀ¸·Î ¶Ç´Â ¾ÆÁÖ ¾î¸° ³ªÀÌ¿¡ ¹è¿ö¼­ º¼ ¼ö Àֱ⠶§¹®¿¡, ¾î¶»°Ô º¸´ÂÁö¿¡ ´ëÇÏ¿© ¸¹Àº »ý°¢À» ÇÏÁö ¾Ê´Â´Ù. °á±¹ ´«Àº ÅÚ·¹ºñÀü Ä«¸Þ¶ó¿Í Å©°Ô ´Ù¸£Áö ¾Ê´Ù. ±×·¯¹Ç·Î, µÎ³ú´Â ¸ÅÀÏ º¸´Â ¸ðµç ¿µ»óÀ» Çؼ®Çϱâ À§ÇÏ¿© ¸¹Àº ¾çÀÇ Ã³¸®¸¦ ÇØ¾ß ÇÑ´Ù. »ç¶÷ÀÌ ¿µ»óÀ» ó¸®ÇÏ´Â ¹æ¹ýÀ» ÄÄÇ»ÅÍ¿¡ º¹»çÇÏ´Â °ÍÀÌ AI ÀÇ ÀÏÀÌ´Ù. ½Ç¼¼°èÀÇ ¿µ»óÀ» Çؼ®ÇÏ´Â ¾î·Á¿òÀ» ÀÌÇØÇϱâ À§ÇÏ¿© ´ÙÀ½ÀÇ ¿©·¯ ¹®Á¦¿Í ±× ÇØ°á ¹æ¾ÈÀ» °øºÎÇÏÀÚ.

(1)  Ç¥¸é ¹æÇâ ã±â (Detecting Surface Direction)

ÀΰøÀ§¼ºÀÌ ÂïÀº ·ÎÅ° »ê¸Æ »çÁøÀ» ±×¸² 3 ¿¡ ÁÖ¾îÁø ½ºÄÉÄ¡¿Í ºñ½ÁÇÏ´Ù. ÀÌ »çÁøÀ» ºÐ¼®Çϱâ À§ÇÏ¿© ÄÄÇ»Å͸¦ »ç¿ëÇÑ´Ù¸é, ÄÄÇ»ÅÍ°¡ »êÀ» º¸°í ÀÖ°í °è°îÀº º¸°í ÀÖÁö ¾Ê´Ù´Â °ÍÀ» ¾î¶»°Ô ÄÄÇ»ÅÍ°¡ ¾Æ´Â°¡? ´Ù½Ã ¸»Çؼ­, »çÁøÀº »ê¸Æ¿¡ °üÇÑ °ÍÀÌÁö, ±×·£µå ij³â°ú °°Àº °ñÂ¥±â¿¡ °üÇÑ °ÍÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ÄÄÇ»ÅÍ´Â ¾î¶»°Ô °áÁ¤ÇÒ ¼ö ÀÖÀ»±î? »ê¸ÆÀÇ ¿µ»óÀ» ¿Ã¹Ù·Î Çؼ®Çϱâ À§ÇØ, ÄÄÇ»ÅÍ´Â ¿µ»ó¿¡¼­ Ç¥¸éÀÇ ¹æÇâÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.

  

±×¸² 3  ÀΰøÀ§¼º¿¡¼­ º» ·ÎÅ° »ê¸Æ

±×¸² 4  »ê°ú °è°î¿¡¼­ÀÇ ºûÀÇ ¹Ý»ç

Ç¥¸éÀÌ ºûÀ» ¹Ý»çÇÏ´Â ¹æ¹ýÀ» °øºÎÇÔÀ¸·Î½á ±× ¹æÇâÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ±×¸² 4 ´Â »ê°ú °è°îÀÇ Ãø¸éÀ» º¸¿©ÁÖ°í °¢°¢Àº žçÀÌ ¹Ù·Î À§¿¡ ÀÖ´Ù. ±×¸²¿¡¼­ º¸¿©ÁÖµíÀÌ, »êÀÇ Ãø¸éÀ» ºñÃß´Â ºûÀº Ãø¸éÀ¸·Î ¹Ý»çµÈ´Ù. ¹Ý¸é¿¡ °è°îÀ» ºñÃß´Â ºûÀº ¸ÕÀú ¹Ý´ëÆí º®¿¡ ¹Ý»çµÇ°í ±×¸®°í ³ª¼­ Çϴ÷Π´Ù½Ã ¹Ý»çµÈ´Ù. ¿µ»óÀ» ºÐ¼®ÇÏ´Â ÇÁ·Î±×·¥Àº ÄÄÇ»ÅÍ°¡ »êÀ» º¸°í ÀÖ´ÂÁö °è°îÀ» º¸°í ÀÖ´ÂÁö °áÁ¤Çϱâ À§Çؼ­ Ç¥¸éÀÇ »ó´ëÀû ¹à±â (brightness) ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ºÐ¼®Àº °£´ÜÇÑ ¿µ»ó¿¡¼­ Á¶Â÷µµ ¸Å¿ì º¹ÀâÇÑ ÀÏÀÌ°í, º¹ÀâÇÑ ¿µ»ó¿¡¼­´Â °ÅÀÇ ¾ÐµµÀûÀÌ´Ù.

(2)  Ç¥¸éÀÇ °á °áÁ¤ (Determining Surface Texture)

ºñ·Ï ¼ÓÀÓÀ» ´çÇÒ ¼ö´Â ÀÖÁö¸¸, ÀϹÝÀûÀ¸·Î ¾î¶² ¹°Ã¼¸¦ º¸¾Æ¼­ ºÎµå·¯¿îÁö °ÅÄ£Áö¸¦ °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î, ÅÐÀÌ ÀÖ´Â °øÀº ºÎµå·¯¿ö º¸ÀÌ°í À¯¸®´ë¸®¼®Àº µüµüÇØ º¸ÀδÙ. ¸Õ °Å¸®¿¡¼­µµ ´õ¿íÀÌ, ¸Å¿ì ±¤ÅÃÀÖ´Â ±Ý¼Ó°ú À¯¸®´Â õ¿¬¸ñÀç¿Í ´Þ¶ó º¸ÀδÙ. ±×·¯¹Ç·Î, ¿Ü¾çÀ» º¸°í ¹°Ã¼ÀÇ °áÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Ù.

ºÎµå·¯¿î ¹°Ã¼¸¦ °ÅÄ£ ¹°Ã¼¿Í ±¸º°ÇÏ´Â ¿­¼è´Â ´Ù½Ã, °¢°¢ÀÌ ºûÀ» ¹Ý»çÇÏ´Â ¹æ¹ýÀ» Çؼ®Çϴµ¥¿¡ ÀÖ´Ù. ±×¸² 5 °¡ º¸¿©ÁÖ´Â °Íó·³, µüµüÇÑ ¹°Ã¼ÀÇ Æ¯¼ºÀÎ ºÎµå·¯¿î Ç¥¸éÀº ±×°ÍÀ» ºñÃß´Â ºûÀ» ±ÕÀÏÇÑ ¹æ¹ýÀ¸·Î ¹Ý»çÇÑ´Ù. ±×·¯³ª, ºÎµå·¯¿î ¹°Ã¼ÀÇ Æ¯Â¡ÀÎ °ÅÄ£ Ç¥¸éÀº ºûÀ» Èð¶ß¸°´Ù. ±×·¯¹Ç·Î, ºÎµå·¯¿î °áÀÇ ¹°Ã¼ÀÇ »ó´ëÀû ¹à±â´Â µüµüÇÑ °áÀÇ ¹°Ã¼º¸´Ù ´õ ÀÛ´Ù.

±×¸² 5  ºÎµå·¯¿î ¸é°ú µüµüÇÑ Ç¥¸é¿¡¼­ÀÇ ¹Ý»ç

ÅëÁ¦µÈ ȯ°æ¿¡¼­, ÄÄÇ»Åʹ ǥ¸éÀÌ ºÎµå·¯¿îÁö °ÅÄ£Áö °áÁ¤Çϱâ À§Çؼ­ ´Ü¼øÈ÷ °¢ ¹°Ã¼ÀÇ »ó´ëÀûÀÎ ¹à±â¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ·± À¯ÇüÀÇ ¿µ»ó󸮴Â, ¿ëÁ¢°ú ÆäÀÎÆ® °°Àº Ư¡ÀÌ ±ÕÀÏÇÑÁö üũµÇ´Â ÀÚµ¿Â÷ Á¶¸³ ¶óÀο¡¼­ ÈçÈ÷ »ç¿ëÇÑ´Ù.

±×·¯³ª, ÄÄÇ»ÅÍ·Î ÇÏ¿©±Ý ½Ç¼¼°è »óȲ¿¡¼­ °áÀÌ °ÅÄ£ ¹°Ã¼¿Í °áÀÌ ºÎµå·¯¿î ¹°Ã¼¸¦ ±¸º°ÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀº ´Ü¼øÈ÷ ¹°Ã¼ÀÇ »ó´ëÀûÀÎ ¹à±â¸¦ ºñ±³ÇÏ´Â °Íº¸´Ù ´õ ¸¹Àº °ÍÀ» ¿ä±¸ÇÑ´Ù. ÀÌÀ¯´Â ¹°Ã¼ÀÇ »ó´ëÀû ¹à±â¸¦ »ö°ú, ±× ¹°Ã¼¸¦ ¸¸µå´Âµ¥ »ç¿ëµÈ Àç·áÀÇ ¹Ý»ç Áú¿¡ ÀÇÇؼ­µµ ¿µÇ⠹ޱ⠶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î °áÀ» °áÁ¤ÇÏ´Â °ÍÀº ºûÀÇ ±Ù¿ø¿¡ °üÇÏ¿© ´Ù¸¥ °üÁ¡¿¡¼­ÀÇ ¹°Ã¼¿¡ ´ëÇÑ µÑ ÀÌ»óÀÇ ¿µ»óÀ» ¿ä±¸ÇÑ´Ù. ±×¸² 6 À» °øºÎÇغ¸ÀÚ : Á¡ A ¿¡¼­ °üÂûÇÒ ¶§, µüµüÇÑ °áÀÇ ¹°Ã¼´Â °üÂûÀÚ¿¡°Ô ºñÃß´Â °ÅÀÇ ¸ðµç ºûÀ» Á÷Á¢ ¹Ý»çÇϱ⠶§¹®¿¡ ¹à¾Æº¸ÀδÙ. ºÎµå·¯¿î °áÀÇ ¹°Ã¼´Â ºûÀÇ ÀϺθ¸ °üÂûÀÚ¿¡°Ô ¹Ý»çÇÑ´Ù. ±×·¯³ª, Á¡ B ¿¡¼­ º¸¸é, µüµüÇÑ °áÀÇ ¹°Ã¼´Â ¾ÆÁÖ ÀûÀº ¾çÀÇ ºû¸¸ ¹Ý»çÇÏ°í, ¹Ý¸é ºÎµå·¯¿î °áÀÇ ¹°Ã¼´Â °ÅÀÇ °°Àº ¾çÀÇ ºûÀ» ¹Ý»çÇÑ´Ù. ±×·¯¹Ç·Î, ÄÄÇ»ÅÍ´Â ¹à±âÀÇ º¯È­¸¦ ºñ±³ÇÔÀ¸·Î½á °áÀ» ±¸º°ÇÒ ¼ö ÀÖ´Ù. Å« º¯È­´Â ºÎµå·¯¿î °áÀ» ³ªÅ¸³»°í ÀÛÀº º¯È­´Â °ÅÄ£ °áÀ» ³ªÅ¸³½´Ù.

±×¸² 6  °üÁ¡ A ¿Í B ¿¡¼­ º» ºÎµå·¯¿î ¹°Ã¼¿Í µüµüÇÑ ¹°Ã¼

4. °øÅëµÈ ÀÎ½Ä ¹®Á¦ (COMMON RECOGNITION PROBLEMS)

2 Â÷¿øÀ̳ª 3 Â÷¿ø ½Ã½ºÅÛÀ» »ç¿ëÇÏ¿©, ¿µ»óÀ» ¿Ã¹Ù·Î Çؼ®ÇÏ´Â ¸ðµç ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÏ¸é ¿µ»óÀ» ±¸¼ºÇÏ´Â ¹°Ã¼³ª Ư¡µéÀ» ¿Ã¹Ù·Î ¾Ë¾Æ³»´Â ¹®Á¦°¡ ¿©ÀüÈ÷ ³²¾ÆÀÖ´Ù. ÀÌ ¹®Á¦´Â ´ÙÀ½ ¼³¸í¿¡ ³ª¿Ã °Í ó·³ ÇØ°áÇϱⰡ ¾Æ¸¶ ´õ ¾î·Á¿ï °ÍÀÌ´Ù.

(1) °ãÄ¡´Â ¹°Ã¼ (Overlapping Objects)

ºñÀü ½Ã½ºÅÛÀ» ¸¸µé·Á°í ÇÒ ¶§ ºÀÂøÇÏ´Â °¡Àå Èûµç ¹®Á¦ ÁßÀÇ Çϳª´Â °ãÄ¡´Â ¹°Ã¼ÀÇ ÀνÄÀÌ´Ù. ¹®Á¦´Â ÇÑ ¹°Ã¼°¡ ´Ù¸¥ ¹°Ã¼ÀÇ ¾Õ¿¡ ÀÖ´Ù´Â °ÍÀ» ÄÄÇ»ÅÍ°¡ ±¸º°ÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ ¾Æ´Ï´Ù : ÀϹÝÀûÀ¸·Î ±×¸²ÀÚ¿Í ¸í¾ÏÀÇ Â÷ÀÌ°¡ ÃæºÐÇÑ ½Ç¸¶¸®¸¦ Á¦°øÇÑ´Ù. ½ÇÁ¦·Î ¾î·Á¿î Á¡Àº ºÎºÐÀûÀÎ ¹°Ã¼°¡ ¹«¾ùÀÎÁö¿¡ ´ëÇؼ­ ±×°ÍÀ» ÀνÄÇϵµ·Ï ÄÄÇ»Å͸¦ ÇÁ·Î±×·¥ÇÏ´Â °ÍÀÌ´Ù. ¿¹¸¦µé¾î, ÄÄÇ»ÅÍ¿¡°Ô »ï°¢ÇüÀº ¼¼ º¯°ú ¼¼ Á¤Á¡À» °®´Â´Ù°í ¾Ë¸®¸é, ±×¸®°í ÄÄÇ»ÅÍ°¡ ´Ù¸¥ ¹°Ã¼¿¡ ÀÇÇØ Èå·ÁÁø (¶Ç´Â ¾Æ¸¶µµ Ä«¸Þ¶óÀÇ ½Ã°è¹Û¿¡ ÀÖ´Â) Á¤Á¡À» Çϳª °®´Â »ï°¢ÇüÀ» º¸¸é, ÄÄÇ»ÅÍ´Â ºñ·Ï ¼¼ ¹ø° Á¤Á¡ÀÌ ¾øÁö¸¸ ¿©ÀüÈ÷ »ï°¢ÇüÀ» º¸°í ÀÖ´Ù´Â °ÍÀ» ¾î¶»°Ô ¾Ë°Ú´Â°¡?

ÀÌ ¹®Á¦¿¡ ´ëÇÑ ¸¹Àº Á¢±Ù ¹æ¹ýÀÌ ÀÖ´Ù. ±×·¯³ª ¾Æ¸¶ °¡Àå Àç¹ÌÀÖ´Â ÇØ°á - ±×¸®°í »ç¶÷ÀÇ ´«ÀÌ ÇÏ´Â °Í°ú °¡Àå °¡±î¿î ¹æ¹ý - Àº ÅëÁ¦µÈ ȯ°¢ (controlled hallucination) ÀÌ´Ù. ÀÌ ¹æ¹ý¿¡¼­ Ãʱâ Á¤º¸¿¡ ÀÇÇØ Áö½Ã¹ÞÀº ÄÄÇ»ÅÍ´Â, »ï°¢ÇüÀ̸ç, µÎ ¼±ÀÌ °¡·ÁÁø ºÎºÐ ¾îµò°¡¿¡¼­ ±³Â÷ÇÒ °ÍÀ̶ó´Â °ÍÀ» °è»êÇÏ´Â °Í°ú °°Àº ¾î¶² ¹æ¹ý¿¡ ÀÇÇØ À̸¦ È®ÀÎÇÏ·ÁÇÏ°í ÀÖ´Ù´Â °ÍÀ» ÁÖÀåÇÑ´Ù. »ý°¢ÇÒ ¼ö ÀÖµíÀÌ, ÀÌ°ÍÀº ¾ÆÁÖ ÅëÁ¦µÈ ȯ°æÀ» Á¦¿ÜÇÑ ¸ðµç ȯ°æ¿¡¼­ ´Ù·ç±â Èûµç °úÁ¤ÀÌ´Ù.

(2) ºÐ·ù¿¡ ÀÇÇÑ ¹°Ã¼ÀÎ½Ä (Recognition of Objects by Classification)

¶Ç´Ù¸¥ ¾î·Á¿î ¹®Á¦´Â ¹°Ã¼µéÀÇ ºÐ·ù - ³ª¹«´Â ³ª¹«´Ù, ÁýÀº ÁýÀÌ´Ù - À» ÀνÄÇϵµ·Ï ÄÄÇ»Å͸¦ ÇÁ·Î±×·¥ÇÏ´Â °ÍÀÌ´Ù. ÄÄÇ»ÅÍ·Î ÇÏ¿©±Ý ¾î¶² ºÐ·ù¿¡ ÀÖ´Â ¹°Ã¼µéÀ» ÀνÄÇÏ°Ô Çϱ⺸´Ù´Â ƯÁ¤ ¹°Ã¼¸¦ ÀνÄÇÏ°Ô ÇÏ´Â °ÍÀÌ ÈξÀ ´õ ½±´Ù. ÀÌ ÀÌÀ¯´Â, ƯÁ¤ ¹°Ã¼¿¡´Â, µû¶ó¾ß ÇÒ ¾ö¹ÐÇÑ Á¦ÇÑÀ» ÁÙ ¼ö ÀÖÁö¸¸, ¾à°£ÀÇ º¯ÇüÀ» ¸ðµÎ ´Ù·ç±â À§ÇÏ¿© ºÐ·ù Á¤ÀÇ (class definition) ¸¦ ¾ÆÁÖ ÀϹÝÀûÀÌ°í ´À½¼ÇÏ°Ô À¯ÁöÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù.

ÀÌ ±ÛÀ» ¾²´Â ÇöÀç ÀÌ ¹®Á¦°¡ ÀϹÝÀûÀÎ °æ¿ì¿¡ ´ëÇÏ¿© ¾î¶»°Ô ÇØ°áµÉ °ÍÀΰ¡´Â ºÐ¸íÇÏÁö ¾Ê´Ù. ³ªÁß¿¡, ÆÐÅÏÀνÄÀ» ¼öÇàÇÏ´Â ¾î¶² ÇÁ·Î±×·¥À» ÀÌ Àå¿¡¼­ °³¹ßÇÔ¿¡ µû¶ó ÄÄÇ»ÅÍ´Â ºÐ·ù Á¤ÀÇ¿¡ ¹ÙÅÁÀ» µÐ °£´ÜÇÑ ±âÇÏÇÐÀû ¸ð¾çÀ» °áÁ¤ÇÒ ¼ö ÀÖÁö¸¸, ÀÌ·± À¯ÇüÀÇ ¹°Ã¼¿¡ Àû¿ëµÉ ¼ö ÀÖ´Â ±â¹ýµéÀº ¾ÆÁÖ º¹ÀâÇÑ ¹°Ã¼·Î º¯ÇüµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù.

(3) ´«ÀÇ Âø°¢ (Optical Illusions)

´«ÀÇ Âø°¢°ú, ÄÄÇ»ÅÍÈ­µÈ ºñÀü ½Ã½ºÅÛ¿¡¼­ÀÇ ¿µÇâ¿¡ ´ëÇÑ ÂªÀº ¾ð±Þ¾øÀÌ ¿µ»ó󸮿¡ ´ëÇÑ °³°üÀº ¿Ï¼ºµÉ ¼ö ¾ø´Ù. ÀÌ»óÇÏ°Ôµµ, Àΰ£À» ¼ÓÀÌ´Â ¸¹Àº ´«ÀÇ Âø°¢Àº °°Àº Çü»óÀÇ ÄÄÇ»ÅÍ ºÐ¼®¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ¿¹µéµé¾î, ±×¸² 6 ÀÇ A ¿Í B ´Â Á¤È®È÷ °°Àº ±æÀÌÀÌÁö¸¸, A °¡ ´õ ±æ¾îº¸ÀδÙ. ±×·¯³ª ÄÄÇ»ÅÍ´Â °°Àº ½Ç¼ö¸¦ ÇÏÁö ¾Ê´Â´Ù.

±×¸² 7  °£´ÜÇÑ ´«ÀÇ Âø°¢ ¿¹

±×·¯³ª, ¹Ý´ë »óȲÀÌ ÀϾ ¼ö ÀÖ´Ù : ÄÄÇ»ÅÍ´Â Àΰ£ÀÌ Çؼ®ÇÏ´Â ¿µ»óÀ¸·Î È¥µ¿À» ÀÏÀ¸Å³ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î, ±æ°í °ðÀº ±æÀ» ³»·Á´Ù º¼ ¶§, Á¼¾Æº¸ÀÌ°í ¸¶Ä§³» "¼Ò¸êÁ¡ (vanishing point)" ¿¡¼­ »ç¶óÁö´Â °Íó·³ º¸Àδ٠: Áï, ¹°Ã¼´Â ´õ ¸Ö¸® ÀÖÀ»¼ö·Ï ´õ ÀÛ¾Æ º¸ÀδÙ. ÀÌ È¿°ú¿¡ Àͼ÷ÇØ ÀÖ°í ±×°Í¿¡ ´ëÇÏ¿© °ÅÀÇ »ý°¢ÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ´ú ¿Ïº®ÇÑ ºñÀü ½Ã½ºÅÛ¿¡¼­, ÄÄÇ»ÅÍ´Â ¸Ö¸®ÀÖ´Â ¹°Ã¼´Â ´Ü¼øÈ÷ ÀÛ´Ù°í »ý°¢Çϱ⠽±´Ù.

±×·¯¹Ç·Î, Àΰ£¿¡°Ô Á¸ÀçÇÏ´Â °Í°ú ´Ù¸¥ Á¾·ùÀÇ Âø½Ã°¡ ÄÄÇ»ÅÍ¿¡ Á¸ÀçÇÑ´Ù´Â °ÍÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ´õ¿ì±â, ´ç¿¬È÷ ¿©±â´Â ¸¹Àº Ư¡µéÀÌ ÄÄÇ»ÅÍ°¡ ¿µ»óÀ» ¿Ã¹Ù·Î Çؼ®ÇÒ ¼ö ÀÖ±âÀü¿¡ ¸íÈ®È÷ ÇÁ·Î±×·¥µÇ¾î¾ß ÇÑ´Ù.

ÀÌÁ¦ Áö´ÉÀûÀÎ ºñÀü ½Ã½ºÅÛ°ú °ü·ÃµÈ ÁÖ¿ä ÁÖÁ¦¿Í ¹®Á¦µéÀÇ °³°üÀ» ¿Ï¼ºÇßÀ¸¹Ç·Î, ÀÌ·± ¸î¸î ¹®Á¦¿¡ ºÎµúÄ¡±â À§ÇÏ¿© C ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» °øºÎÇÒ Áغñ°¡ µÇ¾îÀÖ´Ù.

5. 2 Â÷¿ø ÆÐÅÏÀÎ½Ä (TWO-DIMENSIONAL PATTERN RECOGNITION)

3 Â÷¿ø ¿µ»ó°ú, ±×°ÍÀ» ÀνÄÇÏ´Â µ¥¿¡ ÇÊ¿äÇÑ ±â¹ýµéÀÇ º¹À⼺ ¶§¹®¿¡, ±×°ÍµéÀº ÀÌ Ã¥ÀÇ ¹üÀ§¸¦ ³Ñ¾î¼±´Ù. ±×·¯¹Ç·Î, ÆÐÅÏÀνĿ¡ ´ëÇÑ ÀÌ ¼³¸íÀº 2 Â÷¿ø ¿µ»óÀ¸·Î Á¦ÇÑÇÑ´Ù. ¹æ±Ý ÁÖ¾îÁø °³°ü¿¡¼­ ÁöÀûÇßµíÀÌ, ¿µ»ó󸮸¦ ¿ä±¸ÇÏ´Â ´ëºÎºÐÀÇ ½Ç¿ëÀûÀÎ ¹®Á¦µéÀ» °í´ëºñ, ÆíÆòÇÑ ¿µ»óÀ» »ç¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ´Ù. ¿¹¿¡¼­ »ç¿ëµÉ °ÍÀÌ ¹Ù·Î ÀÌ·± À¯ÇüÀÇ ¿µ»óÀÌ´Ù (¿©±â¼­ ¼³¸íµÈ ¸î°¡Áö ±â¹ýµéÀ» 3 Â÷¿ø ÆÐÅÏÀνÄÀÇ ´õ º¹ÀâÇÑ ºÐ¾ß¿¡µµ Àû¿ëÇÒ ¼ö ÀÖ´Ù).

ÄÄÇ»ÅÍ°¡ ¹°Ã¼¸¦ ÀνÄÇÒ ¼ö ÀÖ´Â ¸¹Àº ¹æ¹ýÀÌ ÀÖ´Ù. ¾î¶² ¹æ¹ýÀº ƯÁ¤ÇÑ ¹°Ã¼µé¿¡ ´ëÇؼ­¸¸ ÀÛµ¿ÇÏ´Â ¹Ý¸é ´Ù¸¥ ¹æ¹ýÀº ÀϹÝÀûÀÎ °æ¿ì¿¡ ´ëÇؼ­ ÀÛµ¿ÇÒ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î, ÇÑ°¡Áö ¹æ¹ýÀÌ ´Ù¸¥ °Íº¸´Ù ³ªÀºÁö °áÁ¤ÇÏ´Â °´°üÀûÀÎ ±âÁØÀ» ¸¸µå´Â °ÍÀº ¾î·Æ´Ù. ±×·¯³ª ´ÙÀ½ ¹®Á¦µé¿¡ ´ëÇÑ ´äÀº ƯÁ¤ÇÑ ÀÎ½Ä ±â¹ýÀ» ¾î¶² »óȲ¿¡ Àû¿ëÇÒ ¼ö ÀÖ°í, ±× Á¦ÇÑÀº ¹«¾ùÀÎÁö ¾Ëµµ·Ï µ½´Â´Ù.

ÀÌ·¯ÇÑ Áú¹®À» ¹è°æÀ¸·Î, ¼¼ °³ÀÇ ¼­·Î ´Ù¸¥ ÆÐÅÏÀÎ½Ä ¹æ¹ý °³¹ß¿¡ ´ëÇÏ¿© º¼ Áغñ°¡ µÇ¾îÀÖ´Ù.

(1) »óȲ (The Situation)

»ï°¢Çü°ú »ç°¢ÇüÀ» ¿Ç°Ô ÀνÄÇÒ ÆÐÅÏÀÎ½Ä ·çƾÀ» µðÀÚÀÎÇØ¾ß ÇÑ´Ù°í »ý°¢Çغ¸ÀÚ. óÀ½¿¡, ´Ü ÇÑ°¡Áö À¯ÇüÀÇ »ï°¢Çü - 2 µîº¯ »ï°¢Çü - ¸¸ ÀÖÀ» °ÍÀÌ´Ù. ³ªÁß¿¡ Á÷°¢ »ï°¢ÇüÀ» Ãß°¡ÇÒ °ÍÀÌ´Ù. Ç×»ó ÇÑ°¡Áö À¯ÇüÀÇ »ç°¢Çü¸¸ ÀÖ´Ù. ÀÌ ÀÏÀº ³Ê¹« °£´ÜÇØ º¸ÀÌÁö¸¸, °ð ¾Ë°Ô µÇ°ÚÁö¸¸, ÆÐÅÏÀÎ½Ä ·çƾÀ» ¸¸µå´Â µ¥¿¡´Â ¸¹Àº ¾î·Á¿òÀÌ ÀÖ´Ù.

(2) ºñµð¿À ¿µ»ó ½Ã¹Ä·¹ÀÌÆ® (Simulation a Video Image)

ÀÌ ÀåÀÇ Ã³À½¿¡¼­ ¾ð±ÞÇßµíÀÌ, ÄÄÇ»ÅÍ¿¡´Â ¾Æ¸¶ ºñÀü ½Ã½ºÅÛÀÌ ºÎÂøµÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡, ±×¸®°í ¿©·¯ °¡Áö ºñÀü Çϵå¿þ¾î°¡ ´Ù¸£°Ô ÀÛµ¿Çϱ⠶§¹®¿¡, ½Ã°¢ ¿µ»óÀ» ½Ã¹Ä·¹ÀÌÆ®ÇÒ °ÍÀÌ´Ù. ÄÄÇ»ÅÍÀÇ ½ºÅ©¸° µð½ºÇ÷¹ÀÌ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ¿© À̸¦ ÇÒ ¼ö ÀÖ´Ù. IBM PC ¿Í ȣȯ ±âÁ¾Àº ¸Þ¸ð¸® ¸Ê ºñµð¿À¸¦ »ç¿ëÇÑ´Ù.

ÀÌ ¹æ¹ý¿¡¼­, ½ºÅ©¸°ÀÇ °¢ ¹®ÀÚ À§Ä¡´Â RAM ÀÇ ¿¹¾à À§Ä¡¿¡¼­ ÇÑ ¹ÙÀÌÆ®¿¡ ´ëÀÀÇÑ´Ù. ÀÌ ¸Þ¸ð¸® ¿µ¿ª¿¡ ¹«¾ùÀÌ ÀÖ°Ç ½ºÅ©¸°¿¡ µð½ºÇ÷¹ÀÌ µÈ´Ù. ¹Ý´ë »óȲÀÌ ¶ÇÇÑ ¹ß»ýÇÒ ¼ö ÀÖ´Ù : ½ºÅ©¸°¿¡ µð½ºÇ÷¹ÀÌ µÇ´Â °ÍÀº ¸Þ¸ð¸®¿¡µµ ÀÖ´Ù. ºñÀü ¿µ»óÀ» ½Ã¹Ä·¹ÀÌÆ® Çϱâ À§ÇØ, ¸ÕÀú ½ºÅ©¸°À» Ŭ¸®¾îÇÏ°í ±×¸®°í ³ª¼­ °£´ÜÇÑ ¹°Ã¼ÀÇ ¿ÜÇüÀ» µð½ºÇ÷¹ÀÌ ÇÑ´Ù. ÀÌ°ÍÀº °í´ëºñÀÎ ÆíÆòÇÑ ¿µ»óÀ» Ç¥ÇöÇÑ´Ù. ±×¸®°í ³ª¼­ °¢ ÇÁ·Î±×·¥ÀÇ ÀÎ½Ä ºÎºÐÀº ºñµð¿À ¸Þ¸ð¸®¸¦ ½ºÄµÇÏ°í, ¹°Ã¼µéÀ» ¾Ë¾Æ³»·Á°í ½ÃµµÇÑ´Ù. ¾Ë ¼ö ÀÖµíÀÌ, ÇÁ·Î±×·¥ÀÇ ÀνĺκÐÀ» ½ºÅ©¸°¿¡ ¹«¾ùÀÌ ³õ¿´´ÂÁö¿¡ ´ëÇÑ Á÷Á¢ÀûÀÎ Áö½ÄÀ» °®Áö ¾Ê´Â´Ù.

¸ðµç C ÄÄÆÄÀÏ·¯°¡ ±×·¡ÇÈ ¶óÀ̺귯¸®¸¦ °®´Â °ÍÀº ¾Æ´Ï¹Ç·Î, ºñµð¿À ¿µ»óÀº ÅؽºÆ® ¸ðµå¿¡¼­ ½Ã¹Ä·¹ÀÌÆ® Çϱâ·Î ÇÑ´Ù. ÀÌ°ÍÀº ¿µ»óÀ» ±¸¼ºÇÏ´Â 24 x 80 °³ÀÇ Çȼ¿ÀÌ ÀÖÀ» °ÍÀ̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÄÄÇ»ÅÍ´Â º°Ç¥ (asterisks) ¿Í ºóÄ­À» »ç¿ëÇÏ¿© ½ºÅ©¸°¿¡ °¢ ¹°Ã¼¸¦ ±×¸± °ÍÀÌ´Ù. Çȼ¿ÀÌ º°Ç¥¸¦ Æ÷ÇÔÇϸé, ÄÄÇ»ÅÍ´Â ¿Â (on) »óÅ¿¡ ÀÖ´Ù°í °¡Á¤ÇÑ´Ù : Çȼ¿ÀÌ ºó Ä­À» Æ÷ÇÔÇϸé, ÄÄÇ»ÅÍ´Â ¿ÀÇÁ (off) »óÅ¿¡ ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. ÀÌ ±â¹ýÀº °í´ëºñ Èæ¹é ¿µ»óÀ» ¸¸µç´Ù. ÇÁ·Î±×·¥Àº ÇöÀç À§Ä¡ÀÇ ¹®ÀÚ¸¦ ¸®ÅÏÇÏ´Â BIOS ÀÎÅÍ·´Æ® 10H, ±â´É¹øÈ£ 8 À» ÀÌ¿ëÇÏ¿© ¿µ»óÀ» ½ºÄµÇÒ ¼ö ÀÖ´Ù. ÅؽºÆ® ¸ðµå »ç¿ëÀ¸·Î, ±×·¡ÇÈ ±â´ÉÀ» °®Áö ¾ÊÀº »ç¿ëÀÚ´Â µÚ¿¡ Á¦½ÃµÈ ÆÐÅÏÀÎ½Ä ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÀÌ ÇÁ·Î±×·¥µéÀ» °ËÅäÇϱâ Àü¿¡, ÇÊ¿ä·Î ÇÏ´Â ¼¼ °³ÀÇ Áö¿øÇÒ ¼ö°¡ ÀÖ´Ù. ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® C ¹öÀü 4.0 °ú °°Àº ¾î¶² C ÄÄÆÄÀÏ·¯´Â Ä¿¼­ (cursor) ÁÖ¼Ò ÁöÁ¤, ½ºÅ©¸° Ŭ¸®¾î, ¿©·¯ °¡Áö BIOS È£ÃâÀ» À§ÇÑ ¶óÀ̺귯¸® ·çƾÀ» Á¦°øÇÏÁö ¾Ê±â ¶§¹®¿¡, ÀÌ ÇÔ¼öµéÀ» ±¸ÇöÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀ» Á÷Á¢ Áö¿øÇÏÁö ¾Ê´Â ÄÄÆÄÀÏ·¯À» »ç¿ëÇÏ´Â µ¶ÀÚµéÀ» À§ÇÏ¿©, ±×°ÍµéÀ» ´ÙÀ½¿¡ ÁغñÇß´Ù : ÇÔ¼öµéÀº ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® C ¹öÀü 4 ÄÄÆÄÀÏ·¯ÀÇ int86() À̶ó´Â Æ÷°ýÀûÀÎ ÀÎÅÍ·´Æ® ·çƾÀ» »ç¿ëÇÑ´Ù.

    /* checks to see if the point is an '*' by using BOIS int 10h, #8 */

    check_point(a, b)

    int a, b;

    {

      union REGS regs;

      gotoxy(a, b);

      regs.h.ah=8;

      regs.h.bh=0;

      int86(16, &regs, &regs);

      if (regs.h.al=='*') return 1;

      return 0;

    }

     

    /* put cursor at x, y */

    gotoxy(x, y)

    int x, y;

    {

      union REGS regs;

      regs.h.ah=2;

      regs.h.dh=y;

      regs.h.dl=x;

      regs.h.bh=0;

      int86(16, &regs, &regs);

    }

     

    /* clear the screen */

    cls()

    {

      union REGS resg;

      regs.h.ah=6;

      regs.h.al=0;

      regs.h.ch=0;

      regs.h.cl=0;

      regs.h.dh=24;

      regs.h.dl=79;

      regs.h.bh=7;

      int68(16, &regs, &regs);

    }

´ÙÀ½ ·çƾÀº °ËÀº ½ºÅ©¸°¿¡, ÁÖ¾îÁø x, y ÁÂÇ¥¿¡ »ï°¢Çü°ú »ç°¢ÇüÀ» ±×¸°´Ù.

    /* draw a triangle at x, y */

    make_triangle(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<5 ; t++) {

        gotoxy(x-t, y+t);

        printf("*");

      }

      for(t=0; t<5; t++) {

        gotoxy(x+t, y+t);

        printf("*");

      }

      gotoxy(x-5, y+5);

      printf("*****************");

    }

     

    /* draw a square at x, y */

    make_square(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<5; t++) {

        gotoxy(x, y+t);

        printf("*");

      }

      for (t=0; t<5; t++) {

        gotoxy(x+10, y+t);

        printf("*");

      }

      gotoxy(x, y);

      printf("****************")

      gotoxy(x, y+5);

      printf("****************");

    }

ÀÌ Àå¿¡¼­ °³¹ßµÈ ¸ðµç ÆÐÅÏÀÎ½Ä ÇÁ·Î±×·¥µéÀº ¿Â »óÅÂÀÇ Çȼ¿µéÀ» ã±â À§ÇÏ¿© ¿µ»óÀ» ºÁ¾ßÇÑ´Ù. ÇÁ·Î±×·¥Àº ¹°Ã¼°¡ ½ºÅ©¸°ÀÇ ¾îµð¿¡ ÀÖ´ÂÁö ¸ð¸£±â ¶§¹®¿¡, º°Ç¥¸¦ Æ÷ÇÔÇÏ´Â Çȼ¿µéÀ» ã¾Æ³»±â À§ÇÏ¿©, ´ÙÀ½¿¡ ÀÖ´Â find_point() ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

    /* returns the cursor loc of an '*' with the search beginning with startx and starty */

    find_point(startx, starty, x, y)

    int startx, starty, *x, *y;

    {

      int a, b;

      a=startx; b=starty;

      do {

        do {

          if (check_point(a, b) {

            *x=a;

            *y=b;

            returns 1;

          }

          a++;

        } while (a<79);

        a=0;

        b++;

      } while (b<24);

      return 0;

    }

find_point() ÇÔ¼ö°¡ È£ÃâµÉ ¶§¸¶´Ù, ÁÂÇ¥ startx, starty ¿¡¼­ ½ÃÀÛÇÏ¿©, ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊ ±×¸®°í À§¿¡¼­ ¾Æ·¡·Î ÁøÇàÇϸ鼭 º°Ç¥¸¦ ã±â ½ÃÀÛÇÑ´Ù. º°Ç¥¸¦ ¹ß°ßÇÏ¸é ±× À§Ä¡¸¦ x ¿Í y ¿¡ ¸®ÅÏÇÑ´Ù. ÀÌÁ¦ ºñµð¿À ¿µ»óÀ» ½Ã¹Ä·¹ÀÌÆ® ÇÏ°í °¢ Çȼ¿À» ¿¢¼¼½ºÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ¸¹Ç·Î ÆÐÅÏÀνÄÀ¸·Î ÁøÇàÇÒ Áغñ°¡ µÇ¾ú´Ù.

(3) °¢¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ (The Recognition-by-Angle Program)

¸Å¿ì ÅëÁ¦µÈ ȯ°æ¿¡¼­, Á¤Á¡ÀÇ °¢À» ÃøÁ¤ÇÔÀ¸·Î½á »ï°¢ÇüÀ̳ª »ç°¢ÇüÀ» ¿Ç°Ô ¾Ë¾Æ³»´Â °ÍÀÌ °¡´ÉÇÏ´Ù. »ï°¢ÇüÀÇ À¯ÇüÀ» À̵À¸·Î Á¦ÇÑÇÏ´Â °ÍÀº »ï°¢ÇüÀ» »ç°¢Çü°ú ±¸º°ÇÏ´Â °ÍÀ» °£´ÜÇÏ°Ô ÇÑ´Ù : ¾î¶² Á¤Á¡¿¡¼­µµ µÎ Á¡¸¸ üũÇÏ¸é µÈ´Ù. Á¡µéÀÌ Á÷°¢À̸é, ±× ¹°Ã¼´Â »ç°¢ÇüÀÓ¿¡ Ʋ¸²¾ø´Ù. Á¡µéÀÌ 60 µµ °¢µµ¿¡ ÀÖÀ¸¸é ±× ¹°Ã¼´Â »ï°¢ÇüÀÓ¿¡ Ʋ¸²¾ø´Ù.

°¢µµ¿¡ ÀÇÇÑ ÀνÄÀ» ±¸ÇöÇÏ´Â °¡Àå ½¬¿î ¹æ¹ýÁßÀÇ Çϳª´Â, ¿ÇÀº À§Ä¡¿¡ ÀÖ´ÂÁö ¾Ë±â À§ÇÏ¿© Á¤Á¡¿¡ ÀÌ¿ôÇÑ Á¡µéÀ» üũÇÏ´Â °ÍÀÌ´Ù. ¿¹¸¦µé¾î, ¾î¶² »ï°¢ÇüÀÇ Á¤Á¡¿¡µµ, ´ë°¢¼±¿¡ ÀÌ¿ôÇÏ´Â º°Ç¥°¡ ÀÖÀ» °ÍÀÌ´Ù. »ç°¢ÇüÀ» ¹ß°ßÇϱâ À§Çؼ­´Â, ÇÁ·Î±×·¥ÀÌ º°Ç¥¸¦ ãÀ» ¶§¸¶´Ù, ±×°ÍÀÇ Á÷°¢¿¡ ¶Ç ´Ù¸¥ º°Ç¥°¡ ÀÖ´ÂÁö ¾Ë±â À§ÇÏ¿© üũÇÑ´Ù´Â °Í¸¸ Á¦¿ÜÇÏ°í´Â, »ï°¢ÇüÀ» ¹ß°ßÇϱâ À§ÇÏ¿© »ç¿ëÇÑ °Í°ú °°Àº °úÁ¤À» µû¸¥´Ù.

´ÙÀ½¿¡ ÀÖ´Â istriangle() °ú issquare() ÇÔ¼ö´Â, ½ºÅ©¸° À§Ä¡°¡ ÁÖ¾îÁ³À» ¶§ °¢°¢ »ï°¢Çü°ú »ç°¢ÇüÀ» Å×½ºÆ®ÇÑ´Ù.

    /* check for a triangle */

    istriangle(x, y)

    int x, y;

    {

      if (check_point(x+1, y+1) && check_point(x-1, y+1))

        return 1;

      return 0;

    }

     

    /* check for a square */

    issquare(x, y)

    int x, y;

    {

      if (check_point(x+1, y) && check_point(x, y+1))

        return 1;

      return 0;

    }

ÁÖµÈ ÇÔ¼ö recognize() ´Â issquare() ¿Í istriangle() À» ´Ù·é´Ù.

    /* search for a triangle and a square */

    recognize()

    {

      int x, y;

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (istriangle(x, y)) {

          gotoxy(0, 0);

          printf("triangle at %d %d", x, y);

          break;

        }

        x++;

      }

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (issquare(x, y) {

          gotoxy(0, 1);

          printf("square at %d %d", x, y);

          break;

        }

        x++;

      }

    }

»ï°¢ÇüÀ» ¹ß°ßÇϱâ À§ÇØ, ÇÁ·Î±×·¥Àº find_point °¡ º°Ç¥ÀÇ À§Ä¡¸¦ ¸®ÅÏÇÒ ¶§¸¶´Ù istriangle() À» È£ÃâÇÑ´Ù. ÇÁ·Î±×·¥ÀÌ »ï°¢ÇüÀ» ¹ß°ßÇϸé, ·çÇÁ´Â ³¡³­´Ù ; ¸¸¾à ÇÁ·Î±×·¥ÀÌ »ï°¢ÇüÀ» ¹ß°ßÇÏÁö ¸øÇϸé, ´Ù¸¥ À§Ä¡¸¦ ½ÃµµÇÑ´Ù. °á±¹, »ï°¢ÇüÀº ¹ß°ßµÈ´Ù.

°¢¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ Àüü°¡ ´ÙÀ½¿¡ ÀÖ´Ù. ÀÌÁ¦ ±×°ÍÀ» ÄÄÇ»ÅÍ¿¡ ³Ö¾î¾ß ÇÑ´Ù.

    #include "dos.h"

    /* Recognition-by-Angles */

    main()

    {

      position();

      recognize();

      getche();

    }

     

    /* read the positions for the objects */

    position()

    {

      int x, y, a, b;

      do {

        printf("x y position of isosceles triangle :  ");

        scanf("%d%d", &x, &y);

      } while (outrange(x, y));

      do {

        printf("¡¬nx y position of square :  ");

        scanf("%d%d", &a, &b);

      } while (outrange(a, b));

      cls();

      make_triangle(x, y);

      make_square(a, b);

    }

     

    /* return true if out-of-range coordinates */

    outrange(x, y)

    int x, y;

    {

      if (x<0 || x>79) return 1;

      if (y<0 || y>24) return 1;

      return 0;

    }

     

    /* draw a triangle at x, y */

    make_triangle(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<5 ; t++) {

        gotoxy(x-t, y+t);

        printf("*");

      }

      for(t=0; t<5; t++) {

        gotoxy(x+t, y+t);

        printf("*");

      }

      gotoxy(x-5, y+5);

      printf("*****************");

    }

     

    /* draw a square at x, y */

    make_square(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<5; t++) {

        gotoxy(x, y+t);

        printf("*");

      }

      for (t=0; t<5; t++) {

        gotoxy(x+10, y+t);

        printf("*");

      }

      gotoxy(x, y);

      printf("****************")

      gotoxy(x, y+5);

      printf("****************");

    }

     

    /* search for a triangle and a square */

    recognize()

    {

      int x, y;

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (istriangle(x, y)) {

          gotoxy(0, 0);

          printf("triangle at %d %d", x, y);

          break;

        }

        x++;

      }

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (issquare(x, y) {

          gotoxy(0, 1);

          printf("square at %d %d", x, y);

          break;

        }

        x++;

      }

    }

     

    /* check for a triangle */

    istriangle(x, y)

    int x, y;

    {

      if (check_point(x+1, y+1) && check_point(x-1, y+1))

        return 1;

      return 0;

    }

     

    /* check for a square */

    issquare(x, y)

    int x, y;

    {

      if (check_point(x+1, y) && check_point(x, y+1))

        return 1;

      return 0;

    }

     

    /* returns the cursor loc of an '*' with the search beginning with startx and starty */

    find_point(startx, starty, x, y)

    int startx, starty, *x, *y;

    {

      int a, b;

      a=startx; b=starty;

      do {

        do {

          if (check_point(a, b) {

            *x=a;

            *y=b;

            returns 1;

          }

          a++;

        } while (a<79);

        a=0;

        b++;

      } while (b<24);

      return 0;

    }

     

    /* checks to see if the point is an '*' by using BOIS int 10h, #8 */

    check_point(a, b)

    int a, b;

    {

      union REGS regs;

      gotoxy(a, b);

      regs.h.ah=8;

      regs.h.bh=0;

      int86(16, &regs, &regs);

      if (regs.h.al=='*') return 1;

      return 0;

    }

     

    /* put cursor at x, y */

    gotoxy(x, y)

    int x, y;

    {

      union REGS regs;

      regs.h.ah=2;

      regs.h.dh=y;

      regs.h.dl=x;

      regs.h.bh=0;

      int86(16, &regs, &regs);

    }

     

    /* clear the screen */

    cls()

    {

      union REGS resg;

      regs.h.ah=6;

      regs.h.al=0;

      regs.h.ch=0;

      regs.h.cl=0;

      regs.h.dh=24;

      regs.h.dl=79;

      regs.h.bh=7;

      int68(16, &regs, &regs);

    }

<°¢¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ ºÐ¼® (Analysis of the Recognition-by-Angles Program) >

ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°°í »ï°¢ÇüÀ» À§Çؼ­´Â ÁÂÇ¥ 10, 10 À», ±×¸®°í »ç°¢ÇüÀ» À§Çؼ­´Â 55, 12 ¸¦ ³Ö¾îº¸ÀÚ. ±×·¯¸é ±×¸² 8 ¿¡ ÀÖ´Â °Í°ú ºñ½ÁÇÑ µð½ºÇ÷¹À̸¦ º¸°Ô µÉ °ÍÀÌ´Ù. ±×¸²ÀÌ º¸¿©ÁÖµíÀÌ, ÀÎ½Ä ·çƾÀº »ï°¢Çü°ú »ç°¢ÇüÀ» ¿Ã¹Ù·Î ¾Ë¾Æ³Â´Ù.

±×¸² 8  °¢¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ÀÇ µð½ºÇ÷¹ÀÌ

ÇÁ·Î±×·¥ÀÇ ¼º´ÉÀ» ºÐ¼®Çϱâ À§Çؼ­ ¾Õ¿¡ ÁÖ¾îÁø Áú¹®À» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ Á¢±Ù¹æ½ÄÀº ´Ù¸¥ ¹°Ã¼ À§¿¡ ³õ¿©Áø ¹°Ã¼¸¦ ¿Ç°Ô ÀνÄÇϴ°¡ ¾Ë¾Æ³»±â À§ÇØ, ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇà½ÃÅ°°í µÎ ¹°Ã¼ÀÇ ÁÂÇ¥·Î 10, 10 À» ³Ö¾îº»´Ù. µð½ºÇ÷¹ÀÌ´Â ±×¸² 9 ¿¡ ÀÖ´Â °Í°ú ºñ½ÁÇÒ °ÍÀÌ´Ù. ·çƾÀº ´Ù½Ã »ï°¢Çü°ú »ç°¢ÇüÀ» ¿Ç°Ô ¹ß°ßÇß´Ù.

±×¸² 9  »ï°¢Çü°ú »ç°¢ÇüÀÌ °ãÄ¡°Ô ÇÑ µð½ºÇ÷¹ÀÌ

¹æÇâÀÌ ÀνĿ¡ ¿µÇâÀ» Áִ°¡? ºÒÇàÈ÷µµ, ÇÁ·Î±×·¥ÀÌ ±¸ÇöµÇ´Â ¹æ¹ýÀº ¹°Ã¼µéÀÌ ¸î °³ÀÇ À§Ä¡ Áß ÇÑ ±ºµ¥¿¡ ÀÖÀ» °ÍÀ» ¿ä±¸ÇÑ´Ù - ¹°Ã¼µéÀº ÀÓÀÇÀÇ À§Ä¡¿¡ ÀÖÀ» ¼ö ¾ø´Ù. ±×·¯³ª ÁÖ¾îÁø ¿¹¿¡¼­, ȸÀü °¡´É¼ºÀÌ ¾øÀ¸¹Ç·Î, ÀÌ ¿ä±¸»çÇ×Àº ÀǹÌÀÖ´Â Á¦ÇÑÀÌ ¾Æ´Ï°í, ·çƾÀ» ¿©·¯ º¯ÇüµÈ ¹®Á¦¿¡ Àû¿ëµÉ ¼ö ¾ø°Ô ÇÑ´Ù. ±×·¯³ª, ¹°Ã¼°¡ ȸÀüµÇ°Ô ÇÏ´Â, °¢¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ÀÇ ¹öÀüÀ» ¼³°èÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù.

¹°Ã¼ÀÇ Á¤È®ÇÑ Å©±â°¡ ÀνĿ¡ ¿µÇâÀ» Áִ°¡? ´ë´äÀº "¾Æ´Ï´Ù" ÀÌ´Ù. ¿Ö³ÄÇÏ¸é ·çƾÀÌ ÇÏ´Â ¸ðµç °ÍÀÌ µÎ º¯ »çÀÌÀÇ ±³Â÷°¢À» È®ÀÎÇÏ´Â °ÍÀ̱⠶§¹®ÀÌ´Ù. µû¶ó¼­ °¢¿¡ ÀÇÇÑ ÀνÄÀ» Å©±â°¡ ´Ù¸¥ ¹°Ã¼¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Ù.

ÇÁ·Î±×·¥Àº ¾ó¸¶³ª È¿À²ÀûÀΰ¡? ´Ü¼ø¼º°ú ¹æÇâ Á¦ÇÑ ¶§¹®¿¡ ÇÁ·Î±×·¥Àº ¸Å¿ì È¿À²ÀûÀÌ´Ù.

ÇÁ·Î±×·¥Àº È¥µ¿µÉ ¼ö Àִ°¡? ¹æ±Ý ÁÖ¾îÁø ¿¹ÀÇ Á¦ÇÑ ³»¿¡¼­, ÇÁ·Î±×·¥Àº ½Ç¼öÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯³ª ¸¸¾à ´Ù¸¥ À¯ÇüÀÇ ¸ð¾çÀÌ Çã¿ëµÇ¸é, ÇÁ·Î±×·¥Àº ½Ç¼ö¸¦ ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î, ÇÁ·Î±×·¥ÀÌ Ã¹ À§Ä¡·Î¼­ Á÷°¢»ï°¢ÇüÀÇ ºøº¯ ¹Ý´ë À§Ä¡ÀÇ Á¤Á¡À» Å×½ºÆ®Çϵµ·Ï »ï°¢ÇüÀÇ ¹æÇâÀÌ µÇ¾î ÀÖÀ¸¸é ÇÁ·Î±×·¥Àº Á÷°¢ »ï°¢ÇüÀ» »ç°¢ÇüÀ¸·Î À߸ø ¾Ë±â°¡ ½±´Ù.

ÀÌ ºÐ¼®¿¡¼­ º¸¿©ÁÖµíÀÌ °¢¿¡ ÀÇÇÑ ÀνÄÀÌ ÇÁ·Î±×·¥À», º¯ÇüµÈ ¹°Ã¼ÀÇ ¼ö°¡ ÃÖ¼ÒÀÎ ¾ÆÁÖ ÅëÁ¦µÈ »óȲ¿¡¸¸ Àû¿ëÇÒ ¼ö ÀÖ´Ù.

(4) ÁÖ¿ä Á¡µé¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ (The Recognition-by-key-Points Program)

Á÷°¢ »ï°¢ÇüÀº °¢¿¡ ÀÇÇÑ ÇÁ·Î±×·¥À» È¥µ¿½Ãų ¼ö Àֱ⠶§¹®¿¡, ÀÌ Àý¿¡¼­´Â ¹æ±Ý Å×½ºÆ®µÈ À̵ »ï°¢Çü°ú »ç°¢Çü¿¡ Á÷°¢ »ï°¢ÇüÀ» Ãß°¡ÇÏ°í, ÀÌ ¼¼ ¹°Ã¼ ¸ðµÎ¸¦ ¾Ë¾Æ³»´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù (ÀÌ ÇÁ·Î±×·¥ÀÇ ¿ÏÀüÇÑ ¸®½ºÆÿ¡ ÁÖ¾îÁø ºÎ°¡ÀûÀÎ µð½ºÇ÷¹ÀÌ Äڵ带 ¹ß°ßÇÒ °ÍÀÌ´Ù).

±×¸² 10  »ï°¢Çü°ú »ç°¢ÇüÀÇ ÁÖ¿ä Á¡

ÇÁ·Î±×·¥ÀÌ Ç×»ó °°Àº Å©±â¸¦ °®´Â ¹°Ã¼¸¦ ¾Ë¾Æ³»´Â ÇÑ°¡Áö ¹æ¹ýÀº ¸î°¡Áö ÁÖ¿ä Á¡µé¸¸ Á¶»çÇÏ´Â °ÍÀÌ´Ù. ÁÖ¿ä Á¡µéÀº ´Ü ÇÑ°¡Áö ¹°Ã¼¸¸ Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ±×·± ¹æ¹ýÀ¸·Î ¼±ÅõȴÙ. ±×¸² 10 Àº ÇÁ·Î±×·¥ÀÌ ¾Ë¾Æ³»¾ß ÇÏ´Â ¼¼ ¹°Ã¼¿Í ÁÖ¿ä Á¡µéÀ» º¸¿©ÁØ´Ù.

µÎ °³ÀÇ ´Ù¸¥ »ï°¢Çü - ´Ù¸¥ ÁÖ¿äÁ¡À» °®´Â - ÀÌ Àֱ⠶§¹®¿¡ °¡Àå ½¬¿î ÇØ°áÀº °¢ À¯ÇüÀ» ÀνÄÇϱâ À§ÇÏ¿© °³º° ·çƾÀ» ¸¸µå´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î, »ç°¢ÇüÀ» ¹ß°ßÇϱâ À§ÇÏ¿© issquare() ¸¦ »ç¿ëÇÏ´Â °Í ¿Ü¿¡, isright() ÇÔ¼ö´Â Á÷°¢»ï°¢ÇüÀ» ¹ß°ßÇÏ°í istriangle() Àº À̵»ï°¢ÇüÀ» ¹ß°ßÇÑ´Ù. istriangle() °ú issquare() ÀÇ »õ ¹öÀü°ú »õ ÇÔ¼ö isright() °¡ ´ÙÀ½¿¡ ÀÖ´Ù. 

    /* check for an isosceles triangle by key points */

    istriangle(x, y)

    int x, y;

    {

      if (check_point(x+5, Y+5))

        return 1;

      return 0;

    }

     

    /* check for a right triangle by key points */

    isright(x, y)

    int x, y;

    {

      if (check_point(x+9, y) && check_point(x, y+9))

        return 1;

      return 0;

    }

     

    /* check for a square by key points */

    issquare(x, y)

    int x, y;

    {

      if (check_point(x+10, y) && check_point(x, y+5) && !check_point(x, y+6)  return 1;

      return 0;

    }

ÁÖ¿ä Á¡µé¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ Àüü°¡ ´ÙÀ½¿¡ ÀÖ´Ù.

    #include "dos.h"

     

    /* Recognition-by-key-points */

    main()

    {

      position();

      recognze();

      getche();

    }

     

    /* read the positions for the objects */

    position()

    {

      int x, y, a, b, i, j;

      do {

        printf("x y position of isosceles triangle :  ");

        scanf("%d%d", &x, &y);

      } while (outrange(x, y));

      do {

        printf("x y position of right triangle :  ");

        scanf("%d%d", &i, &j);

      } while (outrange(x, y));

      do {

        printf("¡¬nx y position of square :  ");

        scanf("%d%d", &a, &b);

      } while (outrange(a, b));

      cls();

      make_triangle(x, y);

      make_square(a, b);

      make_right_triangle(i, j);

    }

     

    /* return true if out-of-range coordinates */

    outrange(x, y)

    int x, y;

    {

      if (x<0 || x>79) return 1;

      if (y<0 || y>24) return 1;

      return 0;

    }

     

    /* draw an isosceles triangle at x, y */

    make_triangle(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<5 ; t++) {

        gotoxy(x-t, y+t);

        printf("*");

      }

      for(t=0; t<5; t++) {

        gotoxy(x+t, y+t);

        printf("*");

      }

      gotoxy(x-5, y+5);

      printf("*****************");

    }

     

    /* draw a right triangle at x, y */

    make_right_triangle(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<10 ; t++) {

        gotoxy(x, y+t);

        printf("*");

      }

      for(t=0; t<9; t++) {

        gotoxy(x-t+9, y+t);

        printf("*");

      }

      gotoxy(x, y);

      printf("*****************");

    }

     

    /* draw a square at x, y */

    make_square(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<5; t++) {

        gotoxy(x, y+t);

        printf("*");

      }

      for (t=0; t<5; t++) {

        gotoxy(x+10, y+t);

        printf("*");

      }

      gotoxy(x, y);

      printf("****************")

      gotoxy(x, y+5);

      printf("****************");

    }

     

    /* search for a triangle and a square */

    recognize()

    {

      int x, y;

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (istriangle(x, y)) {

          gotoxy(0, 0);

          printf("isosceles triangle at %d %d", x, y);

          break;

        }

        x++;

      }

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (isright(x, y)) {

          gotoxy(40, 0);

          printf("right triangle at %d %d", x, y);

          break;

        }

        x++;

      }

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (issquare(x, y) {

          gotoxy(0, 1);

          printf("square at %d %d", x, y);

          break;

        }

        x++;

      }

    }

     

    /* check for an isosceles triangle by key points */

    istriangle(x, y)

    int x, y;

    {

      if (check_point(x+5, Y+5))

        return 1;

      return 0;

    }

     

    /* check for a right triangle by key points */

    isright(x, y)

    int x, y;

    {

      if (check_point(x+9, y) && check_point(x, y+9))

        return 1;

      return 0;

    }

     

    /* check for a square by key points */

    issquare(x, y)

    int x, y;

    {

      if (check_point(x+10, y) && check_point(x, y+5) && !check_point(x, y+6)  return 1;

      return 0;

    }

     

    /* returns the cursor loc of an '*' with the search beginning with startx and starty */

    find_point(startx, starty, x, y)

    int startx, starty, *x, *y;

    {

      int a, b;

      a=startx; b=starty;

      do {

        do {

          if (check_point(a, b) {

            *x=a;

            *y=b;

            returns 1;

          }

          a++;

        } while (a<79);

        a=0;

        b++;

      } while (b<24);

      return 0;

    }

     

    /* checks to see if the point is an '*' */

    check_point(a, b)

    int a, b;

    {

      union REGS regs;

      gotoxy(a, b);

      regs.h.ah=8;

      regs.h.bh=0;

      int86(16, &regs, &regs);

      if (regs.h.al=='*') return 1;

      return 0;

    }

     

    /* put cursor at x, y */

    gotoxy(x, y)

    int x, y;

    {

      union REGS regs;

      regs.h.ah=2;

      regs.h.dh=y;

      regs.h.dl=x;

      regs.h.bh=0;

      int86(16, &regs, &regs);

    }

     

    /* clear the screen */

    cls()

    {

      union REGS resg;

      regs.h.ah=6;

      regs.h.al=0;

      regs.h.ch=0;

      regs.h.cl=0;

      regs.h.dh=24;

      regs.h.dl=79;

      regs.h.bh=7;

      int68(16, &regs, &regs);

    }

<ÁÖ¿ä Á¡µé¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥ ºÐ¼®>

ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°°í ´ÙÀ½ ÁÂÇ¥¸¦ ³Ö¾îº¸ÀÚ.

À̵»ï°¢Çü 10, 4

Á÷°¢»ï°¢Çü    55, 11

»ç°¢Çü          30, 12

±×¸² 11 °ú À¯»çÇÑ µð½ºÇ÷¹À̸¦ º¼ °ÍÀÌ´Ù. ºÐ¸íÈ÷, ÀνÄÀÇ ÁÖ¿äÁ¡ ¹æ½ÄÀº ÀÌ Á¦ÇÑµÈ »óȲ¿¡¼­ ÀÛµ¿ÇÑ´Ù.

±×¸² 11  Á¡¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥¿¡ ÀÇÇÑ µð½ºÇ÷¹ÀÌ

ÇÁ·Î±×·¥ÀÇ Á¦ÇÑÀ» ÀÌÇØÇϱâ À§ÇØ, ´Ù¼¸°¡Áö ±âÁØ Áú¹®¿¡ ´ë´äÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¥Àº ´Ù¸¥ ¹°Ã¼ À§¿¡ ³õÀÎ ¹°Ã¼¸¦ ¿Ã¹Ù·Î ÇØ°áÇϴ°¡? ¾Ë¾Æ³»±â À§ÇØ, ¸ðµç ¹°Ã¼¸¦ 10, 10 ¿¡ ³õ°í ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸¶ó. ´ë´äÀº '¾Æ´Ï´Ù' ÀÌ´Ù : ±×¸² 12 ¿¡ ÀÖ´Â °Íó·³, ÇÁ·Î±×·¥Àº ÀÌÁ¦ ´Ü ÇϳªÀÇ »ç°¢Çü°ú ÇϳªÀÇ »ï°¢Çü¸¸ ÀÖ´Ù°í »ý°¢ÇÑ´Ù.

±×¸² 12  10, 10 ¿¡¼­ÀÇ ¼¼ ¹°Ã¼ µð½ºÇ÷¹ÀÌ

¹°Ã¼ÀÇ ¹æÇâÀÌ ÀνĿ¡ ¿µÇâÀ» Áִ°¡? ±×¸² 12 ´Â ÇÁ·Î±×·¥Àº ¿©ÀüÈ÷ ¸ðµç ¹°Ã¼¸¦ ¹ß°ßÇÏÁö¸¸ »ç°¢ÇüÀÌ 10, 10 ÀÌ ¾Æ´Ñ 10, 14 À§Ä¡¿¡ ÀÖ´Ù°í »ý°¢ÇÑ´Ù. ÀÌ °á°ú´Â Àνıâ¹ýÀ» È¥¶õ½ÃÅ°´Â °ãÄ¡´Â ¹°Ã¼ ¶§¹®ÀÌ´Ù.

¹°Ã¼ÀÇ Á¤È®ÇÑ Å©±â°¡ ÀνĿ¡ ¿µÇâÀ» Áִ°¡? ´ë´äÀº '±×·¸´Ù' ÀÌ´Ù. °¢ ¹°Ã¼´Â ÁÖ¿äÁ¡µé¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥¿¡ ´ëÇÏ¿© Á¤È®È÷ °°Àº Å©±â¿©¾ß Çϴµ¥ ÁÖ¿äÁ¡µéÀº °íÁ¤µÈ °Å¸®¿¡ Àֱ⠶§¹®ÀÌ´Ù.

ÇÁ·Î±×·¥Àº ¾ó¸¶³ª È¿À²ÀûÀΰ¡? ¹°Ã¼ÀÇ Á¤Ã¼ (identity) ¸¦ °áÁ¤Çϱâ À§Çؼ­ ´Ü ¸î °³ÀÇ Á¡¸¸ Á¶»çÇϱ⠶§¹®¿¡, ¾ÆÁÖ È¿À²ÀûÀÌ´Ù. °ÅÀÇ °¢¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥¸¸Å­ È¿À²ÀûÀÌ´Ù.

ÇÁ·Î±×·¥Àº ½±°Ô È¥µ¿µÇ´Â°¡? ÇÁ·Î±×·¥À» ½ÇÇèÇغ¸¸é ¼¼ °³ÀÇ »ï°¢ÇüÀÌ ÀÖ´Ù°í »ý°¢ÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. »ï°¢Çü°ú »ç°¢ÇüÀÇ À§Ä¡¸¦, ÇÁ·Î±×·¥¿¡ »ï°¢ÇüÀ» Çü¼ºÇϵµ·Ï ³ªÅ¸³ª´Â °í¸³µÈ Á¡ÀÌ ÀÖ´Â ±×·± ¹æ½ÄÀ¸·Î ¹è¿­Çϸé ÀÌ·± ÀÏÀÌ »ý±æ ¼ö ÀÖ´Ù.

´õ ´Ù¾çÇÑ »ï°¢ÇüÀ» ÀνÄÇÒ ¼ö ÀÖ´Â °Í°ú´Â º°°³·Î, ÀÌ ÇÁ·Î±×·¥¿¡¼­ ¾òÀº °Íº¸´Ù ÀÒÀº °ÍÀÌ ´õ ¸¹¾Ò´ø °Í°°´Ù. °¢¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥º¸´Ù ÈξÀ ´õ Á¦ÇÑÀûÀΠȯ°æÀ» ¿ä±¸ÇÏ°í È¥µ¿µÇ±â ½±´Ù.

(5) µ¨Å¸-D Àνıâ (The Delta-D Recognizer)

ÀÌ Àå¿¡¼­ °³¹ßÇÒ ¸¶Áö¸· ÀÎ½Ä ¹æ¹ýÀº ¹æÇâÀÇ º¯È­¿¡ ±âÃʸ¦ µÐ´Ù. ¿¹¸¦µé¾î, »ï°¢ÇüÀÇ ¾î¶² Á¡¿¡¼­ ½ÃÀÛÇϵç, ½ÃÀÛÁ¡À¸·Î µ¹¾Æ°¥ ¶§±îÁö ¼±µéÀ» ¦i¾Æ°¡¸é ¹æÇâÀ» ¼¼ ¹ø ¹Ù²Ù°Ô µÉ °ÍÀÌ´Ù. ¸¸¾à »ç°¢ÇüÀÇ ¼±µéÀ» µû¶ó°¡¸é ¹æÇâÀ» ³× ¹ø ¹Ù²Ü °ÍÀÌ´Ù. ¹æÇâÀÌ ¹Ù²î´Â Ƚ¼ö´Â ¸ð¾çÀÇ Á¤Á¡ÀÇ ¼ö¿Í °°´Ù (¿øÀº ÀûºÐ¿¡¼­ ó·³, ¹«ÇÑ ¹øÀÇ ¹æÇâ º¯È­¸¦ °®°Å³ª º¯È­¸¦ °®Áö ¾Ê´Â °ÍÀ¸·Î »ý°¢µÈ´Ù). Á¤Á¡À» ¸¸³¯ ¶§¸¶´Ù, ¹æÇâ º¯È­°¡ ÀÖ´Ù. ÀÌ º¯È­´Â ¼öÇаú ÄÄÇ»ÅÍ°úÇÐ ¿¡¼­ Á¾Á¾ µ¨Å¸°ªÀ̶ó°í ºÎ¸¥´Ù. ¿©±â Á¦½ÃµÈ ÇÁ·Î±×·¥Àº ¹æÇâ º¯È­¿¡ ±âÃÊÇϱ⠶§¹®¿¡ ÀÌ ¹æ¹ýÀº ¶§·Î µ¨Å¸-D Àνıâ¶ó°í ºÎ¸¥´Ù. ¿©±â¼­ D ´Â ¹æÇâ (direction) À» ÀǹÌÇÑ´Ù.

µ¨Å¸-D ÀνıⰡ ÀÛµ¿Çϱâ À§Çؼ­´Â ¹°Ã¼ÀÇ ¸ð¾çÀ» µû¶ó°¡¾ß ÇÑ´Ù. ¾Õ¿¡ ÁÖ¾îÁø ¿¹¿¡¼­, ÇÁ·Î±×·¥Àº ´Ù¸¥ ¼±°ú ±³Â÷ÇÒ ¶§±îÁö Á÷¼±À» µû¶ó°¥ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ±³Â÷Á¡¿¡¼­, ÇÁ·Î±×·¥Àº ´ÙÀ½ Á÷¼±À» Á¤È®È÷ ã¾Æ¼­ ±×°ÍÀ» µû¶ó°¡¾ß ÇÑ´Ù. ÀÌ°ÍÀº ¾î·Á¿î ÇÁ·Î±×·¡¹Ö ¹®Á¦°¡ ¾Æ´ÏÁö¸¸, ±× ÇØ°áÀº ¾µµ¥¾ø´Â ¹éÆ®·¢Å·ÀÇ ¹®Á¦ ¶§¹®¿¡ Á÷°üÀûÀÌÁö ¾Ê´Ù. µ¨Å¸-D Àνı⸦ ±¸ÇöÇÒ ¹æ¹ýÀÌ ¸¹Áö¸¸, ¿©±â¿¡ ÁÖ¾îÁø ÇØ´Â µÎ °¡Áö ¸ñÀûÀ» À§ÇÏ¿© ¹æ¹®ÇÑ ¸ðµç Á¡À» À¯ÁöÇÏ´Â oldp ¶ó°íÇÏ´Â µ¥ÀÌÅͺ£À̽ºÀÇ »ç¿ëÀ» ¿ä±¸ÇÑ´Ù : ¸ÕÀú ·çƾµéÀº ½ÃÀÛÁ¡¿¡ ¾ðÁ¦ µÇµ¹¾Æ°¡´ÂÁö ¾Ë ¼ö ÀÖ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù - ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÌ ¹°Ã¼ÀÇ Àüü ¿ÜÇüÀ» µû¶ó°¬´Ù´Â °ÍÀ» ³ªÅ¸³»ÁØ´Ù. µÎ ¹ø°, ·çƾÀÌ ÀÚ½ÅÀÇ ²¿¸®¸¦ µû¶ó°¡Áö ¾Ê°Ô ÇØ¾ß ÇÑ´Ù. oldp µ¥ÀÌÅͺ£À̽ºÀÇ Á¤ÀÇ¿Í À§Ä¡¸¦ ÀúÀåÇϴµ¥ ÇÊ¿äÇÑ assert_oldp() ÇÔ¼ö, ±×¸®°í À§Ä¡°¡ µ¥ÀÌÅͺ£À̽º¿¡ ÀÖ´ÂÁö¸¦ °áÁ¤Çϴµ¥ ÇÊ¿äÇÑ find() ÇÔ¼ö°¡ ´ÙÀ½¿¡ ÀÖ´Ù.  

    #define MAX 200

    struct oldpoints {

      int x, y;

    } oldp[MAX];

     

    int pos=0;     /* indexes into oldp database */

     

    assert_oldp(x, y)

    int x, y;

    {

      if (pos==MAX) {

        printf("point database full ¡¬n");

        return;

      }

      if (find(x, y))  return;      /* already in db */

      oldp[pos].x=x;

      oldp[pos].y=y;

      pos++;

    }

     

    find(x, y)

    int x, y;

    {

      register int t;

      for (t=0; t<pos; t++)

        if (oldp[t].x==x && oldp[t].y==y)  return 1;

      return 0;

    }

µ¨Å¸-D Àνıâ ÀÛµ¿ÀÇ ÇÙ½ÉÀÌ µÇ´Â follow() ¿Í find_direction() ÇÔ¼ö°¡ ¾Æ·¡¿¡ ÀÖ´Ù. 

    /* follow a shape and return number of turns */

     

    follow(x, y)

    int x, y;

    {

      int incx, incy, startx, starty, count;

      startx=x; starty=y;

      count=0;

      assert_oldp(x, y);

      if (!find_direction(x, y, &incx, &inxy))  return 0;

      do {

        while (check_point(x+incx, y+incy)) {

          x=incx+x;

          y=incy+y;

          assert_oldp(x, y);

        }

        if (x==startx && y=starty)  return count;

        count++;

        if (!find_direction(x, y, &incx, incy))  return 0;

      } while(1);

    }

     

    /* find a new line to follow */

    find_direction(x, y, incx, incy)

    int x, y, *incx, *incy;

    {

      register int a, b;

      for (a=-1; a<2; a++)

        for (b=-1; b<2; b++)

          if (check_point(x, a, y+b) && !find(x+a, y+b))  {

            *incx=a;

            *incy=b;

            return 1;

          }

        return 0;

    }

½ÃÀÛÁ¡ÀÌ ÁÖ¾îÁ® ÀÖÀ» ¶§, follow() ÇÔ¼ö´Â Áõ°¡Ä¡ incx ¿Í incy ÀÇ °ªÀ» °áÁ¤Çϱâ À§Çؼ­ find_direction() À» È£ÃâÇÏ°í, ±× °ªµéÀÌ Á¤ÀÇÇÏ´Â ¼±À» µû¶ó °£´Ù. ´ÙÀ½ À§Ä¡¿¡¼­, Â÷·Ê¸¦ ¾Ë·ÁÁÖ´Â º°Ç¥°¡ ¾øÀ¸¸é »õ·Î¿î Áõ°¡Ä¡¸¦ °áÁ¤Çϱâ À§ÇÏ¿© follow() ´Â ´Ù½Ã find_direction() À» È£ÃâÇÑ´Ù ; follow() ´Â, ´ÙÀ½À¸·Î count ¸¦ Áõ°¡½ÃŲ´Ù. ÇÁ·Î±×·¥ÀÌ ´Ù½Ã ¿øÁ¡ (the point of origin) À» ¸¸³¯ ¶§ °úÁ¤Àº °á·ÐÀ» ³»¸°´Ù.

ÇÔ¼ö find_direction() Àº ´Ù¸¥ º°Ç¥¸¦ ã±â À§ÇÏ¿© ÀÌ¿ô À§Ä¡¸¦ ¸ðµÎ ½ÃµµÇÔÀ¸·Î½á ÀÛµ¿ÇÑ´Ù. find() ·çƾÀº Á¡ÀÌ ÀÌ¹Ì oldp µ¥ÀÌÅͺ£À̽º¿¡ ÀÖÀ¸¸é ÂüÀ» ¸®ÅÏÇÏ°í ¾Æ´Ï¸é °ÅÁþÀ» ¸®ÅÏÇÑ´Ù.±×·¯¹Ç·Î, ÀÌ¹Ì ¹æ¹®ÇÑ Á¡µé·Î´Â ¹Þ¾ÆµéÀÏ ¸¸ÇÑ ¼±ÅÃÀÌ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù. ÀÌ ´Ü°è´Â ·çƾÀ¸·Î ÇÏ¿©±Ý ¿Â ±æÀ» µÇµ¹¾Æ °¡Áö ¸øÇÏ°Ô ÇÑ´Ù.

´Ù½Ã ÀÛ¼ºµÈ istriangle() °ú issquare() ÇÔ¼ö°¡ ´ÙÀ½¿¡ ÀÖ´Ù. ÁÖ¿äÁ¡µé¿¡ ÀÇÇÑ ÀÎ½Ä ÇÁ·Î±×·¥°ú´Â ´Þ¸®, µ¨Å¸-D Àνıâ´Â ¸ðµç »ï°¢ÇüÀÌ ¼¼ º¯À» °®±â ¶§¹®¿¡ »ï°¢ÇüÀ» ¹ß°ßÇϱâ À§ÇÏ¿© ÇϳªÀÇ ·çƾ¸¸À» ÇÊ¿ä·Î ÇÑ´Ù´Â °ÍÀ» ÁÖ¸ñÇØ¾ß ÇÑ´Ù - Á¤È®ÇÑ Å©±â¿Í À§Ä¡´Â Áß¿äÇÏÁö ¾Ê´Ù.

    /* check for an triangle by key points */

    istriangle(x, y)

    int x, y;

    {

      if (follow(x, y)==2)  return 1;

      return 0;

    }

     

    /* check for a square by key points */

    issquare(x, y)

    int x, y;

    {

      if (follow(x, y)==3)  return 1;

      return 0;

    }

¹°Ã¼°¡ »ï°¢ÇüÀÌ¸é ¹æÇâÀÌ µÎ ¹ø ¹Ù²ð °ÍÀÌ´Ù. (istriangle() ÀÇ ÀÌ ¹öÀüÀº ¿ø·¡ ¹æÇâÀ» º¯È­·Î »ý°¢ÇÏÁö ¾Ê±â ¶§¹®¿¡ ¼¼ ¹øÀÌ ¾Æ´Ï´Ù). ±×·¯¹Ç·Î ¸¸¾à follow() °¡ 2 ¸¦ ¸®ÅÏÇϸé, ÀÌ°ÍÀº »ï°¢ÇüÀ» ¹ß°ßÇßÀ½À» ³ªÅ¸³½´Ù. ºñ½ÁÇÏ°Ô, follow() °¡ 3 À» ¸®ÅÏÇϸé, ÀÌ°ÍÀº »ç°¢ÇüÀ» ÀνÄÇßÀ½À» ¾Ë·ÁÁØ´Ù.

µ¨Å¸-D ÇÁ·Î±×·¥ Àüü°¡ ´ÙÀ½¿¡ ÀÖ´Ù. ÀÌÁ¦ ÄÄÇ»ÅÍ¿¡ ³Ö¾î¾ß ÇÒ ¶§´Ù.

    #include "dos.h"

    #define MAX 200

    struct oldpoints {

      int x, y;

    } oldp[MAX];

     

    int pos=0;     /* indexes into oldp database */

     

    /* delta-D Recognizer */

    main()

    {

      clear_db();           /* init the point database */

      position();

      recognze();

      getche();

    }

     

    /* read the positions for the objects */

    position()

    {

      int x, y, a, b, i, j;

      do {

        printf("x y position of isosceles triangle :  ");

        scanf("%d%d", &x, &y);

      } while (outrange(x, y));

      do {

        printf("x y position of right triangle :  ");

        scanf("%d%d", &i, &j);

      } while (outrange(x, y));

      do {

        printf("x y position of square :  ");

        scanf("%d%d", &a, &b);

      } while (outrange(a, b));

       

      cls();

       

      make_triangle(x, y);

      make_square(a, b);

      make_right_triangle(i, j);

    }

     

    /* return true if out-of-range coordinates */

    outrange(x, y)

    int x, y;

    {

      if (x<0 || x>79) return 1;

      if (y<0 || y>24) return 1;

      return 0;

    }

     

    /* draw an isosceles triangle at x, y */

    make_triangle(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<5 ; t++) {

        gotoxy(x-t, y+t);

        printf("*");

      }

      for(t=0; t<5; t++) {

        gotoxy(x+t, y+t);

        printf("*");

      }

      gotoxy(x-5, y+5);

      printf("*****************");

    }

     

    /* draw a right triangle at x, y */

    make_right_triangle(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<10 ; t++) {

        gotoxy(x, y+t);

        printf("*");

      }

      for(t=0; t<9; t++) {

        gotoxy(x-t+9, y+t);

        printf("*");

      }

      gotoxy(x, y);

      printf("*****************");

    }

     

    /* draw a square at x, y */

    make_square(x, y)

    int x, y;

    {

      int t;

      for (t=0; t<5; t++) {

        gotoxy(x, y+t);

        printf("*");

      }

      for (t=0; t<5; t++) {

        gotoxy(x+10, y+t);

        printf("*");

      }

      gotoxy(x, y);

      printf("****************")

      gotoxy(x, y+5);

      printf("****************");

    }

     

    /* search for a triangle and a square */

    recognize()

    {

      int x, y, t;

      t=0;

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (istriangle(x, y)) {

          gotoxy(t*40, 0);   t++;

          printf("triangle at %d %d", x, y);

        }

        x++;

      }

      clear_db();

      x=y=0;

      while (find_point(x, y, &x, &y)) {

        if (issquare(x, y)) {

          gotoxy(0, 1);

          printf("square at %d %d", x, y);

          break;

        }

        x++;

      }

    }

     

    /* check for an triangle by key points */

    istriangle(x, y)

    int x, y;

    {

      if (follow(x, y)==2)  return 1;

      return 0;

    }

     

    /* check for a square by key points */

    issquare(x, y)

    int x, y;

    {

      if (follow(x, y)==3)  return 1;

      return 0;

    }

     

    /* follow a shape and return number of turns */

    follow(x, y)

    int x, y;

    {

      int incx, incy, startx, starty, count;

      startx=x; starty=y;

      count=0;

      assert_oldp(x, y);

      if (!find_direction(x, y, &incx, &incy))  return 0;

      do {

        while (check_point(x+incx, y+incy)) {

          x=incx+x;

          y=incy+y;

          assert_oldp(x, y);

        }

        if (x==startx && y=starty)  return count;

        count++;

        if (!find_direction(x, y, &incx, &incy))  return 0;

      } while(1);

    }

     

    /* find a new line to follow */

    find_direction(x, y, incx, incy)

    int x, y, *incx, *incy;

    {

      register int a, b;

      for (a=-1; a<2; a++)

        for (b=-1; b<2; b++)

          if (check_point(x+a, y+b) && !find(x+a, y+b))  {

            *incx=a;

            *incy=b;

            return 1;

          }

        return 0;

    }

     

    assert_oldp(x, y)

    int x, y;

    {

      if (pos==MAX) {

        printf("point database full ¡¬n");

        return;

      }

      if (find(x, y))  return;      /* already in db */

      oldp[pos].x=x;

      oldp[pos].y=y;

      pos++;

    }

     

    find(x, y)

    int x, y;

    {

      register int t;

      for (t=0; t<pos; t++) {

        if (oldp[t].x==x && oldp[t].y==y)  return 1;

        }

      return 0;

    }

     

    /* returns the cursor loc of an '*' with the search beginning with startx and starty */

    find_point(startx, starty, x, y)

    int startx, starty, *x, *y;

    {

      int a, b;

      a=startx; b=starty;

      do {

        do {

          if (check_point(a, b) {

            *x=a;

            *y=b;

            returns 1;

          }

          a++;

        } while (a<79);

        a=0;

        b++;

      } while (b<24);

      return 0;

    }

     

    /* checks to see if the point is an '*' */

    check_point(a, b)

    int a, b;

    {

      union REGS regs;

      gotoxy(a, b);

      regs.h.ah=8;

      regs.h.bh=0;

      int86(16, &regs, &regs);

      if (regs.h.al=='*') return 1;

      return 0;

    }

     

    /* put cursor at x, y */

    gotoxy(x, y)

    int x, y;

    {

      union REGS regs;

      regs.h.ah=2;

      regs.h.dh=y;

      regs.h.dl=x;

      regs.h.bh=0;

      int86(16, &regs, &regs);

    }

     

    /* clear the screen */

    cls()

    {

      union REGS resg;

      regs.h.ah=6;

      regs.h.al=0;

      regs.h.ch=0;

      regs.h.cl=0;

      regs.h.dh=24;

      regs.h.dl=79;

      regs.h.bh=7;

      int68(16, &regs, &regs);

    }

     

    clear_db()

    {

      register int t;

      for (t=0; t<MAX; t++)  oldp[t].x=oldp[t].y=0;

    }

<µ¨Å¸-D Àνı⠺м®>

ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°°í ´ÙÀ½ ÁÂÇ¥µéÀ» ³Ö¾îº¸ÀÚ.

±×¸² 13 ¿¡ ÀÖ´Â °Í°ú ºñ½ÁÇÑ µð½ºÇ÷¹À̸¦ º¸°Ô µÉ °ÍÀÌ´Ù. ºÐ¸íÈ÷, µ¨Å¸-D ÀÎ½Ä ¹æ¹ýÀº ¿¹ÀÇ Á¦ÇÑµÈ »óȲ¿¡ ´ëÇÏ¿© ÀÛµ¿ÇÑ´Ù.

±×¸² 13  µ¨Å¸-D ÇÁ·Î±×·¥ÀÇ µð½ºÇ÷¹ÀÌ

ÇÁ·Î±×·¥ÀÇ Ãë¾à¼ºÀ» ÀÌÇØÇϱâ À§Çؼ­, ´Ù¼¸°¡Áö ±âÁØ Áú¹®¿¡ ´äÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¥Àº ´Ù¸¥ ¹°Ã¼ À§¿¡ ³õÀÎ ¹°Ã¼¸¦ ¿Ã¹Ù·Î ÀνÄÇϴ°¡? ÀÌ Áú¹®Àº µ¨Å¸-D ÀνıâÀÇ ÃÖ¾ÇÀÇ Æ¯Â¡À» ÁöÀûÇØ ³½´Ù ; ÇÑ ¹°Ã¼°¡ ´Ù¸¥ ¹°Ã¼ À§¿¡ ÀÖÀ» ¶§ ¿ÏÀüÈ÷ ½ÇÆÐÇÑ´Ù. À̸¦ º¸±âÀ§ÇØ, ¸ðµç ¹°Ã¼¸¦ 10,10 ¿¡ ³õ°í ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇà½ÃÄÑ º¸ÀÚ. °á°ú°¡ ±×¸² 14 ¿¡ ÀÖ´Ù ; ÇÁ·Î±×·¥Àº ¾î¶² »ï°¢Çüµµ ¹ß°ßÇØ ³»Áö ¸øÇÏ°í, »ç°¢ÇüÀ» ¾Ë¾Æ³»´Â °ÍÀº ´ÜÁö ¿ì¿¬¿¡ ºÒ°úÇÏ´Ù. ³Ê¹« ¸¹Àº ¹æÇâ º¯È­ ¶§¹®¿¡, ¸¹Àº ¼±µéÀ» µû¶ó°¡´Â °á°ú°¡ µÇ¾î, »ï°¢ÇüµéÀ» ±¸º°ÇÒ ¼ö ¾ø´Ù.

±×¸² 14  10, 10 ¿¡¼­ÀÇ ¼¼ ¹°Ã¼ µð½ºÇ÷¹ÀÌ

¹°Ã¼ÀÇ ¹æÇâÀÌ Àνı⿡ ¿µÇâÀ» Áִ°¡? ÇÁ·Î±×·¥ÀÇ °¡Àå ÈǸ¢ÇÑ Æ¯Â¡ ÁßÀÇ Çϳª´Â ¹°Ã¼°¡ ¾î´À À§Ä¡¿¡ ÀÖ°Ç »ó°ü¾øÀÌ ¿Ç°Ô ÀÛµ¿ÇÒ °ÍÀ̶ó´Â °ÍÀÌ´Ù. ÀÌ Æ¯Â¡Àº µ¨Å¸-D Àνı⸦ ¸¹Àº ½Ç¼¼°è »óȲ¿¡¼­ ¸Å·ÂÀûÀÌ°Ô ÇÑ´Ù.

¹°Ã¼ÀÇ Á¤È®ÇÑ Å©±â°¡ ÀνĿ¡ ¿µÇâÀ» Áִ°¡? µ¨Å¸-D ¹æ½ÄÀÇ ´Ù¸¥ ÁÁÀº Á¡Àº ¹°Ã¼°¡ ¾î¶² Å©±âÀÌ°Ç »ó°üÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº ÀÏ´ÜÀÇ ¹°Ã¼µéÀ» ÀνÄÇϱâ À§ÇÏ¿© ±×°ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

ÇÁ·Î±×·¥Àº ¾ó¸¶³ª È¿À²ÀûÀΰ¡? µ¨Å¸-D Àνıâ´Â ¾Õ¿¡ ÁÖ¾îÁø µÎ ÇÁ·Î±×·¥º¸´Ù ÈξÀ ´õ ÀϹÝÀûÀ̱⠶§¹®¿¡ ±×°Íµé¸¸Å­ È¿À²ÀûÀ¸·Î ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ½Å·Ú¼ºÀ» À§ÇÑ È¿À²ÀÇ Æ®·¹ÀÌµå ¿ÀÇÁ (trade-off) ´Â ÀϹÝÀûÀ¸·Î °¡Ä¡°¡ ÀÖ´Ù.

ÇÁ·Î±×·¥Àº ½±°Ô È¥µ¿µÇ´Â°¡? ±¸ÇöµÈ °Íó·³, µ¨Å¸-D Àνıâ´Â °ãÄ¡´Â ¹°Ã¼¿¡ ÀÇÇØ ½±°Ô È¥µ¿µÉ ¼ö ÀÖÁö¸¸, Ưº°ÇÑ »óȲÀÇ Á¦ÇÑ ³»¿¡¼­ ÇÑ°¡Áö À¯ÇüÀÇ ¹°Ã¼¸¦ ´Ù¸¥ °ÍÀ¸·Î À߸ø ¾ËÁö´Â ¾ÊÀ» °ÍÀÌ´Ù.

ÃÖÁ¾ ºÐ¼®¿¡¼­, µ¨Å¸-D ¹æ¹ýÀº Àû¿ëµÇ´Â ȯ°æÀÌ ¾ÆÁÖ ÅëÁ¦µÇ´Â ÇÑ ÀÌ Àå¿¡ Á¦½ÃµÈ ¼¼°¡Áö ÇÁ·Î±×·¥µé Áß °¡Àå Å« ÀϹݼºÀ» Á¦°øÇÑ´Ù.

6. ÀϹÝÈ­µÈ ½Ã½ºÅÛ (GENERALIZED SYSTEMS)

ÀÌ Àå¿¡ Á¦½ÃµÈ ¼³¸í°ú ¿¹°¡ º¸¿© ÁÖ¾úµíÀÌ, ¿µ»óÀ» Çؼ®ÇÏ´Â ¾î¶² ¹æ¹ýµµ ¸ðµç »óȲ¿¡ ÀûÀýÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ¿µ¸®ÇÑ (smart) ÇÁ·Î±×·¥¿¡ ÀÇÇØ ¼±ÅÃÀûÀ¸·Î Àû¿ëµÇ´Â ¸¹Àº ¼­·Î ´Ù¸¥ ¹æ¹ýÀ» °áÇÕÇÏ¿© ¸¶Ä§³» °øÅëµÈ ½Ç¼¼°è »óȲ¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ´Â ½Ã½ºÅÛÀÌ ³ª¿Ã °ÍÀÌ´Ù.