home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-12-05 | 102.6 KB | 3,061 lines |
- âïÇéÇ 4 -- 1 --
- -------
-
- âÉÇöêèÇ
- -----------------------------------------------------------------
-
- é φΓ«⌐ ú½áóÑ »α¿ó«ñ¿Γß∩ íẫóδ⌐ ¡áí«α Σπ¡¬µ¿⌐ úαáΣ¿¬¿,
- ¬«Γ«αδÑ »«ºó«½∩εΓ α¿ß«óáΓ∞ («Γ«íαáªáΓ∞ ¡á φ¬αá¡Ñ) Γ«τ¬¿, ½¿¡¿¿,
- »α∩¼«πú«½∞¡¿¬¿, «¬απª¡«ßΓ¿, ¿ß»«½∞ºπ∩ 󫺼«ª¡«ßΓ¿ úαáΣ¿τÑ߬¿σ
- áñá»ΓÑα«ó CGA ¿½¿ EGA. ¥Γ¿ »α«úαá¼¼δ ¿ß»«½∞ºπεΓß∩ ¬á¬ «ß¡«óá, ¡á
- ¬«Γ«α«⌐ ßΓα«∩Γß∩ Σπ¡¬µ¿¿ úαáΣ¿¬¿ í«½ÑÑ óδß«¬«ú« πα«ó¡∩. ä½∩ í«½ÑÑ
- ñÑΓá½∞¡«ú« ¿ºπτÑ¡¿∩ φΓ¿σ íẫóδσ úαáΣ¿τÑ߬¿σ Σπ¡¬µ¿⌐ »αÑñ½áúáÑΓß∩
- ¬¡¿úá "æ: The Complete Reference" Herb Schild (Osborn /
- McGrow-Hall, 1987).
-
- Å«¼¿¼« ¬αáΓ¬«ú« »αÑñßΓáó½Ñ¡¿∩ íẫóδσ Σπ¡¬µ¿⌐ úαáΣ¿¬¿, ó
- φΓ«⌐ ú½áóÑ »α¿ó«ñ∩Γß∩ ß½ÑñπεΘ¿Ñ »α«úαá¼¼δ:
-
- - ß«σαá¡Ñ¡¿Ñ úαáΣ¿τÑ߬¿σ ¿º«íαáªÑ¡¿⌐ ó Σá⌐½Ñ ¡á ñ¿ß¬Ñ;
- - ºáúαπº¬á úαáΣ¿τÑ߬¿σ ¿º«íαáªÑ¡¿⌐ ¿º Σá⌐½á;
- - óαáΘÑ¡¿Ñ «íΩÑ¬Γ«ó ó ñóπ¼Ñα¡«¼ »α«ßΓαá¡ßΓóÑ;
- - ¬«»¿α«óá¡¿Ñ ¿½¿ »ÑαÑß佬á úαáΣ¿τÑ߬¿σ ¿º«íαáªÑ¡¿⌐.
-
- é ¬«¡µÑ ú½áóδ »α¿óÑóÑ¡ ΓѬßΓ "»α«úαá¼¼δ-σπñ«ª¡¿¬á",
- »«ºó«½∩εΘÑ⌐ α¿ß«óáΓ∞ ¡á φ¬αá¡Ñ ΓÑନ¡á½á, ß ¿ß»«½∞º«ó᡿Ѽ ¬½áó¿Φ
- »ÑαѼÑΘÑ¡¿∩ ¬παß«αá.
-
- Å« ¼ÑαÑ ó«ºαáßΓá¡¿∩ óáΦÑú« «»δΓá »« ¿ß»«½∞º«óá¡¿ε Σπ¡¬µ¿⌐
- úαáΣ¿¬¿, óδ ß¼«ªÑΓÑ ßἫßΓ«∩Γѽ∞¡« αáºαáíáΓδóáΓ∞ σ«α«Φ¿Ñ
- »α«úαá¼¼δ. ìá»α¿¼Ñα, ¿ß»«½∞ºπ∩ Σπ¡¬µ¿¿ ß«σαá¡Ñ¡¿∩ ¿ ºáúαπº¬¿
- úαáΣ¿τÑ߬¿σ ¿º«íαáªÑ¡¿⌐, óδ ß¼«ªÑΓÑ ß«ºñáóáΓ∞ úαáΣ¿¬¿ ¿½¿
- ñ¿áúαá¼¼δ ¿ πß»ÑΦ¡« ¿ß»«½∞º«óáΓ∞ ¿σ ó ß½πτáÑ ¡Ñ«íσ«ñ¿¼«ßΓ¿.
- êß»«½∞ºπ∩ Σπ¡¬µ¿¿ óαáΘÑ¡¿∩ ¿º«íαáªÑ¡¿⌐ «íΩÑ¬Γ«ó, óδ ß¼«ªÑΓÑ
- αáºαáíáΓδóáΓ∞ »α«úαá¼¼δ "ºóѺñ¡δσ ó«⌐¡" - «íαáºÑµ "ª¿ó«⌐"
- úαáΣ¿¬¿, ¬«Γ«αδÑ íπñπΓ »αÑñßΓáó½∩Γ∞ í«½∞Φ«⌐ ¿¡ΓÑαÑß ñ½∩ óáß. éδ
- ß¼«ªÑΓÑ ΓᬪÑ, ¿ß»«½∞º«óáΓ∞ φΓ¿ Σπ¡¬µ¿¿ ¬á¬ «ß¡«óπ ñ½∩
- ¿ß»«½∞º«óá¡¿∩ ß¿ßΓѼ áóΓ«¼áΓ¿º¿α«óá¡¡«ú« »α«Ñ¬Γ¿α«óá¡¿∩ (CAD/CAM
- system).
-
- ä½∩ ¬«ααÑ¬Γ¡«ú« ¿ß»«½∞º«óá¡¿∩ »α«úαá¼¼, «»¿ßá¡δσ ó φΓ«⌐
- ú½áóÑ, óá¼ ¡Ñ«íσ«ñ¿¼δ ¬«¼»∞εΓÑαδ Γ¿»á IBM PC XT, IBM PC AT ¿½¿
- ñαπú¿Ñ ß«ó¼ÑßΓ¿¼δÑ ß ¡¿¼¿ ¼«ñѽ¿, ß¡áíªÑ¡¡δÑ úαáΣ¿τÑ߬¿¼¿
- áñá»ΓÑαἿ CGA ¿½¿ EGA. éßÑ »α«úαá¼¼δ, »α¿óÑñÑ¡¡δÑ ó ñá¡¡«⌐
- ú½áóÑ, ¬α«¼Ñ »α«úαá¼¼ ¿º«íαáªÑ¡¿∩ Γ«τ¬¿, á»»áαáΓ¡«-¡Ñºáó¿ß¿¼δ, ¿
- óδ ¼«ªÑΓÑ ß ¼¿¡¿¼á½∞¡δ¼¿ πß¿½¿∩¼¿ ßñѽáΓ∞ ¿σ αáí«τ¿¼¿ ¡á ñαπú¿σ
- Γ¿»áσ úαáΣ¿τÑ߬¿σ ¼áΦ¿¡.
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 2 --
-
-
- éêäàÄÉàåêî¢ ê ûéàÆÄéǃ ÅÇïêÆÉÇ
- -----------------------------------------------------------------
-
- ÅÑαÑñ ¿ß»«½∞º«ó᡿Ѽ ¬á¬¿σ-½¿í« Σπ¡¬µ¿⌐ úαáΣ¿¬¿ ¬«¼»∞εΓÑα
- ñ«½ªÑ¡ íδΓ∞ »ÑαÑóÑñÑ¡ ó ß««ΓóÑΓßΓóπεΘ¿⌐ ó¿ñÑ«αѪ¿¼. ä½∩
- ¬«¼»∞εΓÑα«ó Γ¿»á IBM PC φΓ« «º¡áτáÑΓ, τΓ« ñ«½ª¡δ íδΓ∞ óδíαá¡δ
- »«ñσ«ñ∩Θ¿Ñ αѪ¿¼ ¿ »á½¿Γαá.
-
- é Γáí½¿µÑ 4-1 »α¿óÑñÑ¡δ αẽ¿τ¡δÑ ó¿ñÑ«αѪ¿¼δ, ó ¬«Γ«αδσ
- ¼«úπΓ αáí«ΓáΓ∞ ¬«¼»∞εΓÑαδ IBM PC. ä½∩ Σπ¡¬µ¿⌐, »α¿óÑñÑ¡¡δσ ó
- φΓ«⌐ ú½áóÑ, ΓαÑíπÑΓß∩ 4 ó¿ñÑ«αѪ¿¼, »αÑñ»«½áúáεΘ¿⌐ ¿ß»«½∞º«óá¡¿Ñ
- µóÑΓ¡«ú« úαáΣ¿τÑ߬«ú« ñ¿ß»½Ñ∩ ß αẼÑα¡«ßΓ∞ε φ¬αá¡á 320 ¡á 200.
- ò«Γ∩ áñá»ΓÑα EGA »«ññÑনóáÑΓ ¿ αѪ¿¼δ ß αáßΦ¿αÑ¡¡«⌐ αáºαÑΦáεΘÑ⌐
- ß»«ß«í¡«ßΓ∞ε ñ¿ß»½Ñ∩, 4 ó¿ñÑ«αѪ¿¼ óδíαá¡ ó ¬áτÑßΓóÑ íẫó«ú« ñ½∩
- αáºαáí«Γ¬¿ ¿ ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿⌐ úαáΣ¿¬¿ ó ßó∩º¿ ß ΓѼ, τΓ« «¡
- »«ññÑনóáÑΓß∩ ¬á¬ áñá»ΓÑα«¼ EGA, Γᬠ¿ CGA. êß»«½∞º«óá¡¿Ñ «ß«íδσ
- αѪ¿¼«ó EGA ΓαÑíπÑΓ Γ«½∞¬« ¿º¼Ñ¡Ñ¡¿∩ Σπ¡¬µ¿⌐ ºá»¿ß¿ Γ«τ¬¿ (ß¼«Γα¿
- ¬¡¿úπ »« ¿ß»«½∞º«óá¡¿ε úαáΣ¿¬¿ ó EGA "Advance Grafics in C"
- Nelson Jobson Osborn/McGrow-Hall, 1987). éá¼ ¡Ñ«íσ«ñ¿¼«
- ºá»«¼¡¿Γ∞, τΓ« ó« óßÑσ ¬«ñáσ óÑασ¡¿⌐ ½Ñóδ⌐ πú«½ ¿¼ÑÑΓ ¬««αñ¿¡áΓδ
- 0,0.
-
- BIOS-»αÑαδóá¡¿Ñ 16, Σπ¡¬µ¿∩ 0, πßΓá¡áó½¿óáÑΓ ó¿ñÑ«αѪ¿¼ ¿
- ¿ß»«½∞ºπÑΓß∩ ó Σπ¡¬µ¿¿ mode(), ΓѬßΓ ¬«Γ«α«⌐ »α¿óÑñÑ¡ ¡¿ªÑ. ì«
- »αѪñÑ τѼ óδ «º¡á¬«¼¿ΓÑß∞ ß ¡Ñ⌐, »αÑñ½áúáѼ óá¼ ó¡¿¼áΓѽ∞¡«
- ¿ºπτ¿Γ∞ óßÑ ó¿ñÑ«αѪ¿¼δ, »«ññÑনóáѼδÑ ß««ΓóÑΓßΓóπεΘ¿¼¿
- áñá»ΓÑαἿ. ä½∩ φΓ«ú« «íαáΓ¿ΓÑß∞ ¬ Γáí½¿µÑ 4-1.
-
-
- Æáí½¿µá 4-1 ÉѪ¿¼δ ΓÑନ¡á½á ñ½∩ ¼áΦ¿¡ IBM PC
-
- -----------------------------------------------------------------
- ÉѪ¿¼ Æ¿» ÉẼÑα¡«ßΓ∞ Çñá»ΓÑα
- φ¬αá¡á
- -----------------------------------------------------------------
-
- 0 á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, τ/í 40σ25 CGA, EGA
- 1 á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, 16 µó. 40σ25 CGA, EGA
- 2 á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, τ/í 80σ25 CGA, EGA
- 3 á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, 16 µó. 80σ25 CGA, EGA
- 4 úαáΣ¿τÑ߬¿⌐, 4 µóÑΓá 320σ200 CGA, EGA
- 5 úαáΣ¿τÑ߬¿⌐, 4 ßÑαδσ Γ«¡á 320σ200 CGA, EGA
- 6 úαáΣ¿τÑ߬¿⌐, τ/í 640σ200 CGA, EGA
- 7 á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, τ/í 80σ25 ¼«¡«σα«¼¡δ⌐
- 8 úαáΣ¿τÑ߬¿⌐, 16 µóÑΓ«ó 160σ200 PCjr
- 9 úαáΣ¿τÑ߬¿⌐, 16 µóÑΓ«ó 320σ200 PCjr
- 10 úαáΣ¿τÑ߬¿⌐, 4 µóÑΓá-PCjr 640σ200 PCjr, EGA
- 16 µóÑΓ«ó-EGA
- 13 úαáΣ¿τÑ߬¿⌐, 16 µóÑΓ«ó 320σ200 EGA
- 14 úαáΣ¿τÑ߬¿⌐, 16 µóÑΓ«ó 640σ200 EGA
- 15 úαáΣ¿τÑ߬¿⌐, 4 µóÑΓá 640σ350 EGA
- -----------------------------------------------------------------
-
- Ç ΓÑ»Ñα∞ »α¿óÑñѼ ΓѬßΓ Σπ¡¬µ¿¿ mode().
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 3 --
-
-
-
- /* ôßΓá¡«ó¬á ó¿ñÑ«αѪ¿¼á */
- void mode(mode_code)
- int mode_code;
- {
- union REGS r;
- r.h.al = mode_code;
- r.h.ah = 0;
- int86(0x10,&r,&r);
- }
-
-
- é 4-«¼ αѪ¿¼Ñ ñ«ßΓπ»¡δ ñóÑ »á½¿Γαδ (¡áí«αá µóÑΓ«ó). èáªñá∩
- »á½¿Γαá «»αÑñѽ∩ÑΓ τÑΓδαÑ µóÑΓá, «Γ«íαáªáѼδÑ ¡á φ¬αá¡Ñ
- ΓÑନ¡á½á. é IBM PC »á½¿Γαá 0 «»αÑñѽ∩ÑΓ ªÑ½Γδ⌐, ºÑ½Ñ¡δ⌐ ¿
- ¬αáß¡δ⌐ µóÑΓá, »á½¿Γαá 1 «»αÑñѽ∩ÑΓ íѽδ⌐, ∩ᬫ-¬αáß¡δ⌐
- (»πα»πα¡δ⌐) ¿ ú«½πí«⌐ µóÑΓá. ä½∩ ¬áªñ«⌐ »á½¿Γαδ τÑΓóÑαΓδ¼ µóÑΓ«¼
- ∩ó½∩ÑΓß∩ µóÑΓ Σ«¡á, ¬«Γ«αδ⌐ «íδτ¡« τÑα¡δ⌐. BIOS-»αÑαδóá¡¿Ñ 16,
- Σπ¡¬µ¿∩ 11, πßΓá¡áó½¿óáÑΓ »á½¿Γαπ.
-
- öπ¡¬µ¿∩ pallet(), »α¿óÑñÑ¡¡á∩ ¡¿ªÑ, πßΓá¡áó½¿óáÑΓ ¡«¼Ñα
- »á½¿Γαδ, ¬«Γ«αδ⌐ ºáñáÑΓß∩ ó ¬áτÑßΓóÑ º¡áτÑ¡¿∩ ÑÑ áαúπ¼Ñ¡Γá:
-
- /* ôßΓá¡«ó¬á »á½¿Γαδ */
- void palette(pnum)
- int pnum;
- {
- union REGS r;
-
- r.h.bh=1; /* ¬«ñ 4 úαáΣ¿τÑ߬«ú« αѪ¿¼á */
- r.h.bl=pnum; /* ¡«¼Ñα »á½¿Γαδ */
- r.h.ah=11; /* πßΓá¡áó½¿óáÑΓß∩ ñ½∩ ó맮óá »á½¿Γαδ */
- int86(0x10,&r,&r);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 4 --
-
-
- çÇÅêæ£ ÆÄùèê ÉÇæÆÉÇ
- -----------------------------------------------------------------
-
- Äñ¡«⌐ ¿º «ß¡«ó¡δσ »α«úαá¼¼ úαáΣ¿¬¿ ∩ó½∩ÑΓß∩ »α«úαá¼¼á ºá»¿ß¿
- Γ«τ¬¿ αáßΓαá - ¡á¿¼Ñ¡∞ΦÑ⌐ áñαÑßπѼ«⌐ Γ«τ¬¿ ¡á φ¬αá¡Ñ ñ¿ß»½Ñ∩. é
- ñá¡¡«¼ ß½πτáÑ ΓÑନ¡ "Γ«τ¬á αáßΓαá" íπñÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ñ½∩
- «»¿ßá¡¿∩ ¡á¿¼Ñ¡∞ΦÑ⌐ áñαÑßπѼ«⌐ Γ«τ¬¿ ó «Γñѽ∞¡δσ úαáΣ¿τÑ߬¿σ
- αѪ¿¼áσ. Æá¬ ¬á¬ Σπ¡¬µ¿∩ ºá»¿ß¿ Γ«τ¬¿ αáßΓαá ¿ß»«½∞ºπÑΓß∩ ó
- ñαπú¿σ »α«úαá¼¼áσ í«½ÑÑ óδß«¬«ú« πα«ó¡∩, ÑÑ φΣΣÑ¬Γ¿ó¡«ßΓ∞ «τÑ¡∞
- ó᪡á ñ½∩ íδßΓα«ñÑ⌐ßΓó¿∩ »α«úαá¼¼ óÑασ¡¿σ πα«ó¡Ñ⌐, ¬«Γ«αδÑ
- ¡Ñ»«ßαÑñßΓóÑ¡¡« αÑ὿ºπεΓ Σπ¡¬µ¿¿ úαáΣ¿¬¿. ìá IBM PC ¿
- ß«ó¼ÑßΓ¿¼δσ ß ¡¿¼¿ ¬«¼»∞εΓÑαáσ ßπΘÑßΓóπεΓ ñóá ß»«ß«íá óδó«ñá
- ¿¡Σ«α¼áµ¿¿ ß ¿ß»«½∞º«ó᡿Ѽ Γ«τѬ αáßΓαá. ÅÑαóδ⌐ ß»«ß«í,
- ¿ß»«½∞ºπεΘ¿⌐ »αÑαδóá¡¿∩ ROM-BIOS, ∩ó½∩ÑΓß∩ ¡á¿í«½ÑÑ »α«ßΓδ¼, ¡« ¿
- ¡á¿¼Ñ¡ÑÑ íδßΓα«ñÑ⌐ßΓóπεΘ¿¼ (ß½¿Φ¬«¼ ¼Ññ½Ñ¡¡δ¼ ñ½∩ ¡áΦ¿σ µÑ½Ñ⌐).
- éΓ«αδ¼ ¿ í«½ÑÑ íδßΓα«ñÑ⌐ßΓóπεΘ¿¼¿ ß»«ß«í«¼ ∩ó½∩ÑΓß∩ αẼÑΘÑ¡¿Ñ
- ¿¡Σ«α¼áµ¿¿ ¡Ñ»«ßαÑñßΓóÑ¡¡« ó ó¿ñÑ«»á¼∩Γ¿ ñ¿ß»½Ñ∩ (ROM). ê¼Ñ¡¡«
- φëà ¼ÑΓ«ñ ¿ αáßß¼áΓα¿óáÑΓß∩ ¡¿ªÑ.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 5 --
-
-
- Éáí«Γá áñá»ΓÑα«ó CGA/EGA ó úαáΣ¿τÑ߬ѫ¼ αѪ¿¼Ñ
- ----------------------------------------------
-
- Çñá»ΓÑα CGA óßÑúñá αáß»«½áúáÑΓß∩ ó ó¿ñÑ«»á¼∩Γ¿ »« áñαÑßπ
- 8000000h. Çñá»ΓÑα EGA ¿¼ÑÑΓ á¡á½«ú¿τ¡«Ñ αáß»«½«ªÑ¡¿Ñ ñ½∩ ΓÑσ
- αѪ¿¼«ó, ¬«Γ«αδÑ ß«ó¼ÑßΓ¿¼δ ß αѪ¿¼á¼¿ CGA (í«½ÑÑ »«½¡πε
- ¿¡Σ«α¼áµ¿ε « á»»áαáΓ¡δσ ßαÑñßΓóáσ »«ññÑ᪬¿ úαáΣ¿¬¿ óδ ¼«ªÑΓÑ
- »«½πτ¿Γ∞ ó απ¬«ó«ñßΓóÑ "IBM Technical Reference"). é 4
- úαáΣ¿τÑ߬«¼ αѪ¿¼Ñ ¬áªñδ⌐ íá⌐Γ ß«ñÑαª¿Γ ¿¡Σ«α¼áµ¿ε « µóÑΓÑ ñ½∩ 4
- Γ«τѬ αáßΓαá (ñ½∩ ¬áªñ«⌐ Γ«τ¬¿ αáßΓαá »« 2 í¿Γá). æ½Ññ«óáΓѽ∞¡«,
- ñ½∩ αáí«Γδ ß φ¬αá¡«¼ αẼÑα¡«ßΓ∞ε 320 ¡á 200 ΓαÑíπÑΓß∩ 16è
- »á¼∩Γ¿. Æá¬ ¬á¬ ñóá í¿Γá ¼«úπΓ ß«ñÑαªáΓ∞ Γ«½∞¬« 4 αẽ¿τ¡δσ
- º¡áτÑ¡¿∩, ó 4 ó¿ñÑ«αѪ¿¼Ñ »«ññÑনóáεΓß∩ Γ«½∞¬« 4 µóÑΓá. ç¡áτÑ¡¿Ñ
- ¬áªñ«ú« ñóπσí¿Γ«ó«ú« í½«¬á «»αÑñѽ∩ÑΓ µóÑΓ ó ß««ΓóÑΓßΓó¿¿ ß
- Γáí½¿µÑ⌐, »α¿óÑñÑ¡¡«⌐ ¡¿ªÑ:
-
- ---------------------------------------------------
- ç¡áτÑ¡¿Ñ ûóÑΓ ó »á½¿ΓαÑ 0 ûóÑΓ ó »á½¿ΓαÑ 1
- ---------------------------------------------------
- Σ«¡ Σ«¡
- 1 ªÑ½Γδ⌐ ú«½πí«⌐
- 2 ¬αáß¡δ⌐ »πα»πα¡δ⌐
- 3 ºÑ½Ñ¡δ⌐ íπ½δ⌐
- ---------------------------------------------------
-
- Äß«íÑ¡¡«ßΓ∞ áñá»ΓÑαá CGA ºá¬½ετáÑΓß∩ ó Γ«¼, τΓ« τÑΓ¡δÑ Γ«τ¬¿
- αáßΓαá íπñπΓ αáß»«½áúáΓ∞ß∩ »« áñαÑßπ B8000000h, á ¡ÑτÑΓ¡δÑ - ¡á
- 2000h (8152 - ó ñÑß∩Γ¿τ¡«¼ ó¿ñÑ) íá⌐Γ«ó óδΦÑ, Γ.Ñ. »« áñαÑßπ
- B8002000h. æ½Ññ«óáΓѽ∞¡«, ¬áªñá∩ ßΓ᫬á Γ«τѬ αáßΓαá ΓαÑíπÑΓ 80
- íá⌐Γ«ó (40 ñ½∩ τÑΓ¡δσ Γ«τѬ αáßΓαá, 40 - ñ½∩ ¡ÑτÑΓ¡δσ). é¡πΓα¿
- ¬áªñ«ú« íá⌐Γá Γ«τ¬¿ αáß»«½áúáεΓß∩ ß½Ñóá ¡á»αáó«, ¬á¬ «¡¿
- »«∩ó½∩εΓß∩ ¡á φ¬αá¡Ñ ΓÑନ¡á½á. ¥Γ« «º¡áτáÑΓ, τΓ« Γ«τ¬á αáßΓαá ß
- ¡«¼Ñα«¼ 0 ºá¡¿¼áÑΓ 6 ¿ 7 í¿Γδ, ó Γ« óαѼ∩, ¬á¬ Γ«τ¬á αáßΓαá ß
- ¡«¼Ñα«¼ 3 - 0 ¿ 1 í¿Γδ.
-
- Æá¬ ¬á¬ ¬áªñδ⌐ íá⌐Γ ¬«ñ¿απÑΓ º¡áτÑ¡¿Ñ τÑΓδαÑσ Γ«τѬ αáßΓαá,
- óδ ñ«½ª¡δ ß«σαá¡∩Γ∞ º¡áτÑ¡¿Ñ ΓαÑσ Γ«τѬ »α¿ ¿º¼Ñ¡Ñ¡¿¿ «ñ¡«⌐ ¿º
- ¡¿σ. ïπτΦ¿⌐ ß»«ß«í ßñѽáΓ∞ φΓ« - ß«ºñá¡¿Ñ í¿Γ«ó«⌐ ¼á߬¿ ß« óßѼ¿
- í¿ΓἿ, πßΓá¡«ó½Ñ¡¡δ¼¿ ó 1, ¬α«¼Ñ ΓÑσ, ¬«Γ«αδÑ íπñπΓ ¿º¼Ñ¡∩Γ∞ß∩.
- ç¡áτÑ¡¿Ñ í¿Γ«ó«⌐ ¼á߬¿ ߬½áñδóáÑΓß∩ »« ßσÑ¼Ñ "ê" ß ñÑ⌐ßΓó¿Γѽ∞¡δ¼
- º¡áτÑ¡¿Ñ¼ íá⌐Γá, á ºáΓѼ »«½πτÑ¡¡«Ñ º¡áτÑ¡¿Ñ ߬½áñδóáÑΓß∩ »«
- ßσÑ¼Ñ "êïê" ß ¡«óδ¼ º¡áτÑ¡¿Ñ¼. Äñ¡á¬« ß¿Γπᵿ∩ ¡Ñ߬«½∞¬«
- ¼Ñ¡∩ÑΓß∩, Ñß½¿ óδ σ«Γ¿ΓÑ ß½«ª¿Γ∞ »« ßσÑ¼Ñ "ìà-êïê" ¡«ó«Ñ ¿ ßΓáα«Ñ
- º¡áτÑ¡¿∩. é φΓ«¼ ß½πτáÑ óδ »α«ßΓ« ߬½áñδóáÑΓÑ »« ßσÑ¼Ñ "êïê"
- ßΓáα«Ñ º¡áτÑ¡¿Ñ íá⌐Γá ß 0, á ºáΓѼ ߬½áñδóáÑΓÑ »« ßσÑ¼Ñ "ìà-êïê"
- ¡«ó«Ñ ñó«¿τ¡«Ñ »αÑñßΓáó½Ñ¡¿Ñ µóÑΓá ¿ »«½πτáÑΓÑ αѺπ½∞ΓáΓ. ÇñαÑß
- ΓαÑíπѼ«ú« íá⌐Γá «»αÑñѽ∩ÑΓß∩ »πΓѼ π¼¡«ªÑ¡¿∩ º¡áτÑ¡¿∩ ¬««αñ¿¡áΓδ
- X ¡á 40, á ºáΓѼ ñ«íáó½∩ÑΓß∩ º¡áτÑ¡¿Ñ ¬««αñ¿¡áΓδ Y, ñѽѡ¡«Ñ ¡á
- 4. ä½∩ Γ«ú«,τΓ«íδ «»αÑñѽ¿Γ∞, ¡áσ«ñ¿Γß∩ ½¿ Γ«τ¬á αáßΓαá ó τÑΓ¡«¼
- ¿½¿ ¡ÑτÑΓ¡«¼ í½«¬Ñ »á¼∩Γ¿, ¿ß»«½∞ºπÑΓß∩ «ßΓáΓ«¬ «Γ ñѽѡ¿∩
- º¡áτÑ¡¿∩ ¬««αñ¿¡áΓδ ò ¡á 2. àß½¿ «ßΓáΓ«¬ αáóÑ¡ 0, í½«¬ ∩ó½∩ÑΓß∩
- τÑΓ¡δ¼ (¿ß»«½∞ºπÑΓß∩ »Ñαóδ⌐ í½«¬), ó »α«Γ¿ó¡«¼ ß½πτáÑ - í½«¬
- ¡ÑτÑΓ¡δ⌐ (¿ß»«½∞ºπÑΓß∩ óΓ«α«⌐ í½«¬). ÆαÑíπѼδÑ í¿Γδ ó¡πΓα¿ íá⌐Γá
- óδτ¿ß½∩εΓß∩ »πΓѼ óδ»«½¡Ñ¡¿∩ ñѽѡ¿∩ »« ¼«ñπ½ε 4. ÄßΓáΓ«¬
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 6 --
-
-
- «»αÑñѽ∩ÑΓ ¡«¼Ñα ñóπσí¿Γ«ó«ú« »á¬ÑΓá, ¬«Γ«αδ⌐ ß«ñÑαª¿Γ ¿¡Σ«α¼áµ¿ε
- « ΓαÑíπѼδσ Γ«τ¬áσ αáßΓαá. ä½∩ πßΓá¡«ó¬¿ íá⌐Γá αѪ¿¼á µóÑΓá ¿
- í¿Γ«ó«⌐ ¼á߬¿ ¿ß»«½∞ºπεΓß∩ «»ÑαáΓ«αδ »«í¿Γ«ó«ú« ßñó¿úá. ò«Γ∩
- ¼á¡¿»π½¿α«óá¡¿Ñ í¿ΓἿ ó Σπ¡¬µ¿¿ mempoint() ¡Ñ߬«½∞¬« ºá»πΓá¡«,
- óδ, «ñ¡á¬«, íѺ Γαπñá αáºíÑαÑΓÑß∞ ó ¡Ñ⌐, Ñß½¿ ΓΘáΓѽ∞¡« ¿ºπτ¿ΓÑ
- τΓ« ¿¼Ñ¡¡« ¿ ¬á¬ «¡á ñѽáÑΓ.
-
-
- /* çỿß∞ Γ«τ¬¿ ó CGA/EGA */
- void mempoint(x,y,color_code)
- int x,y,color_code;
- {
- union mask {
- char c[2];
- int i;
- } bit_mask;
- int i,index,bit_position;
- unsigned char t;
- char xor; /* "ìà-êïê" µóÑΓá ó ß½πτáÑ Ñú« ¿º¼Ñ¡Ñ¡¿∩ */
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó »á¼∩Γ¿
- CGA */
- bit_mask.i=0xFF3F; /* 11111111 00111111 ó ñó«¿τ¡«¼ ¬«ñÑ */
- if (x<0 || x>199 || y<0 || y>319) return;
- xor=color_code & 128; /* »α«óÑα¬á, πßΓá¡áó½¿óá½ß∩ ½¿
- αѪ¿¼ "ìà-êïê" */
- color_code=color_code & 127; /* ¼á߬á ßΓáαΦ¿σ í¿Γ«ó */
-
- /* πßΓá¡«ó¬á í¿Γ«ó«⌐ ¼á߬¿ ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
- ó »αáóπε »«º¿µ¿ε */
-
- bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿
- ó íá⌐ΓÑ */
- color_code<<=2*(3-bit_position); /* ßñó¿ú ¬«ñá µóÑΓá
- ó ¡πª¡πε »«º¿µ¿ε */
- bit_mask.i>>=2*bit_position; /* ßñó¿ú í¿Γ«ó«⌐ ¼á߬¿ ó
- ¡πª¡πε »«º¿µ¿ε */
-
- /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
- index=x*40+(y%4);
- if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
- óΓ«α«⌐ í½«¬ */
- /* ºá»¿ß∞ µóÑΓá */
- if (!xor) { /* αѪ¿¼ ¿º¼Ñ¡Ñ¡¿∩ µóÑΓá */
- t=*(ptr+index) & bit_mask.c[0];
- *(ptr+index)=t|color_code;
- }
- else {
- t=*(ptr+index) | (char)0;
- *(ptr+index)=t & color_code;
- }
- }
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 7 --
-
-
- çá¼ÑΓ¿¼, τΓ« Γ¿» π¬áºáΓѽ∩ ó¿ñÑ«»á¼∩Γ¿ «íΩ∩ó½Ñ¡ ¬á¬ far; φΓ«
- ¡Ñ«íσ«ñ¿¼«, Ñß½¿ óδ Γαá¡ß½¿απÑΓÑ ó ¼«ñѽ¿ ¼á½Ñ¡∞¬«⌐ (small)
- »á¼∩Γ¿. éδ ΓᬠªÑ ñ«½ª¡δ ºá¼ÑΓ¿Γ∞, τΓ« ߻ѵ¿á½∞¡δ⌐ ¼áα¬Ñα αѪ¿¼á
- ºá»¿ß¿ XOR, «»αÑñѽѡ¡δ⌐ ó Σπ¡¬µ¿∩σ ROM-BIOS, ¿ß»«½∞ºπÑΓß∩ ¿ ó
- Σπ¡¬µ¿¿ mempoint().
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 8 --
-
-
- é¢ùàÉùêéÇìêà ïêìêë
- -----------------------------------------------------------------
-
- öπ¡¬µ¿¿ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐ ∩ó½∩εΓß∩ «ß¡«ó¡δ¼¿ »«ñ»α«úαἼἿ
- úαáΣ¿¬¿ ¿ ¿ß»«½∞ºπεΓß∩ ñ½∩ «Γ«íαáªÑ¡¿∩ ½¿¡¿⌐ ó ºáñá¡¡«¼ µóÑΓÑ
- »πΓѼ ºáñá¡¿∩ ÑÑ ¡áτá½∞¡δσ ¿ ¬«¡Ñτ¡δσ ¬««αñ¿¡áΓ. é Γ« óαѼ∩, ¬á¬
- ¿º«íαáªÑ¡¿Ñ óÑαΓ¿¬á½∞¡δσ ¿ ú«α¿º«¡Γá½∞¡δσ ½¿¡¿⌐ ¡Ñ »αÑñßΓáó½∩ÑΓ
- «ß«í«ú« Γαπñá, í«½ÑÑ Γαπñ¡«⌐ ºáñáτÑ⌐ ∩ó½∩ÑΓß∩ ß«ºñá¡¿Ñ Σπ¡¬µ¿⌐,
- ¬«Γ«αδÑ α¿ßπεΓ ½¿¡¿¿ óñ«½∞ ñ¿áú«¡á½Ñ⌐. ìá»α¿¼Ñα, ¬á¬¿Ñ Γ«τ¬¿
- ß«ßΓáó½∩εΓ ½¿¡¿ε, óδτÑατ¿óáѼπε «Γ Γ«τ¬¿ ß ¬««αñ¿¡áΓἿ 0,0 ñ«
- Γ«τ¬¿ ß ¬««αñ¿¡áΓἿ 80,120?
-
- Äñ¿¡ ¿º »«ñσ«ñ«ó ¬ αáºαáí«Γ¬Ñ Σπ¡¬µ¿⌐ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐
- ¿ß»«½∞ºπÑΓ «Γ¡«ΦÑ¡¿Ñ ¼Ñªñπ ß¼ÑΘÑ¡¿Ñ¼ »« ¬««αñ¿¡áΓá¼ X ¿ Y. ùΓ«íδ
- »«¬áºáΓ∞ φëà »«ñσ«ñ ó ñÑ⌐ßΓó¿¿, »α«óÑñѼ ½¿¡¿ε ¼Ñªñπ Γ«τ¬á¼¿ ß
- ¬««αñ¿¡áΓἿ 0,0 ¿ 5,10. æ¼ÑΘÑ¡¿Ñ »« X αáó¡« 5, á »« Y - 10.
- ÄΓ¡«ΦÑ¡¿Ñ αáó¡« 1/2. Ä¡« íπñÑΓ ¿ß»«½∞º«óáΓß∩ »α¿ «»αÑñѽѡ¿¿
- ¬«φΣΣ¿µ¿Ñ¡Γá ºáó¿ß¿¼«ßΓ¿, »« ¬«Γ«α«¼π ñ«½ª¡δ ¼Ñ¡∩Γ∞ß∩ ¬««αñ¿¡áΓδ
- X ¿ Y »α¿ ¿º«íαáªÑ¡¿¿ ½¿¡¿⌐. é ñá¡¡«¼ ß½πτáÑ φΓ« «º¡áτáÑΓ, τΓ«
- »α¿αáΘÑ¡¿Ñ ¬««αñ¿¡áΓδ X ß«ßΓáó½∩ÑΓ »«½«ó¿¡π óѽ¿τ¿¡δ ¿º¼Ñ¡Ñ¡¿∩
- ¬««αñ¿¡áΓδ Y. ìáτ¿¡áεΘ¿⌐ »α«úαá¼¼¿ßΓ τáßΓ« ¿ß»«½∞ºπÑΓ φëà ¼ÑΓ«ñ
- »α¿ αáºαáí«Γ¬Ñ Σπ¡¬µ¿⌐ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐. ò«Γ∩ Γᬫ⌐ »«ñσ«ñ
- ¼áΓѼáΓ¿τÑ߬¿ óÑαÑ¡ ¿ »α«ßΓ ñ½∩ »«¡¿¼á¡¿∩, ñ½∩ Ñú« »αáó¿½∞¡«⌐
- αáí«Γδ ¿ ñ½∩ Γ«ú«, τΓ«íδ ¿ºíѪáΓ∞ ßÑα∞Ѻ¡δσ «Φ¿í«¬ «¬απú½Ñ¡¿∩,
- ¡Ñ«íσ«ñ¿¼« ¿ß»«½∞º«óáΓ∞ ¼áΓѼáΓ¿τÑ߬¿Ñ «»Ñαᵿ¿ ß τ¿ß½á¼¿ ß
- »½áóáεΘÑ⌐ Γ«τ¬«⌐. ¥Γ« «º¡áτáÑΓ, τΓ« Σπ¡¬µ¿¿ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐
- íπñπΓ αáí«ΓáΓ∞ ñ«ó«½∞¡« ¼Ññ½Ñ¡¡«, Ñß½¿ ó ß¿ßΓѼπ ¡Ñ íπñÑΓ ó¬½ετÑ¡
- ¼áΓѼáΓ¿τÑ߬¿⌐ ß«»α«µÑßß«α (¡á»α¿¼Ñα - Intel 8087). Å« φΓ«⌐
- »α¿τ¿¡Ñ φëà ¼ÑΓ«ñ ¿ß»«½∞ºπÑΓß∩ ñ«ó«½∞¡« αÑñ¬«.
-
- ìá¿í«½ÑÑ «íΘ¿⌐ ¼ÑΓ«ñ ¿º«íαáªÑ¡¿∩ ½¿¡¿⌐ ó¬½ετáÑΓ
- ¿ß»«½∞º«óá¡¿Ñ á½ú«α¿Γ¼á üαѺѡσá¼á. ò«Γ∩ «ß¡«ó«⌐ ó ¡Ñ¼ ß½πª¿Γ
- Γá¬ªÑ «Γ¡«ΦÑ¡¿Ñ ¼Ñªñπ αáßßΓ«∩¡¿∩¼¿ »« ¬««αñ¿¡áΓá¼ X ¿ Y, ó ñá¡¡«¼
- ß½πτáÑ ¡Ñ ΓαÑíπÑΓß∩ óδ»«½¡∩Γ∞ ñѽѡ¿Ñ ¿½¿ óδτ¿ß½Ñ¡¿Ñ τ¿ßѽ ß
- »½áóáεΘÑ⌐ Γ«τ¬«⌐. é¼ÑßΓ« φΓ«ú«, «Γ¡«ΦÑ¡¿Ñ ¼Ñªñπ º¡áτÑ¡¿∩¼¿
- ¬««αñ¿¡áΓ X ¿ Y »αÑñßΓáó½∩ÑΓß∩ ¬«ßóÑ¡¡δ¼ «íαẫ¼ τÑαѺ ßÑα¿¿
- ß½«ªÑ¡¿⌐ ¿ óδτ¿Γá¡¿⌐. Äß¡«ó¡«⌐ ¿ñÑÑ⌐ á½ú«α¿Γ¼á üαѺѡσá¼á,
- ∩ó½∩ÑΓß∩ αÑú¿ßΓαᵿ∩ ßαÑñ¡¿σ º¡áτÑ¡¿⌐ »«úαÑΦ¡«ßΓÑ⌐ ¼Ñªñπ
- ¿ñÑá½∞¡δ¼ »«½«ªÑ¡¿Ñ¼ ¬áªñ«⌐ Γ«τ¬¿ ¿ Γ«⌐ »«º¿µ¿Ñ⌐ ¡á φ¬αá¡Ñ
- ñ¿ß»½Ñ∩, ó ¬«Γ«α«⌐ «¡á ñÑ⌐ßΓó¿Γѽ∞¡« «Γ«íαáªáÑΓß∩. Å«úαÑΦ¡«ßΓ∞
- ¼Ñªñπ ¿ñÑá½∞¡δ¼ ¿ ñÑ⌐ßΓó¿Γѽ∞¡δ¼ »«½«ªÑ¡¿Ñ¼ Γ«τ¬¿ 󫺡¿¬áÑΓ óó¿ñπ
- «úαá¡¿τÑ¡¡δσ 󫺼«ª¡«ßΓÑ⌐ ΓÑσ¡¿τÑ߬¿σ ßαÑñßΓó. öá¬Γ¿τÑ߬¿ ¡Ñ
- ßπΘÑßΓóπÑΓ ñ¿ß»½ÑÑó ß íÑ߬«¡Ñτ¡« í«½∞Φ«⌐ αáºαÑΦáεΘÑ⌐
- ß»«ß«í¡«ßΓ∞ε, ¿, ß½Ññ«óáΓѽ∞¡«, ñÑ⌐ßΓó¿Γѽ∞¡«Ñ »«½«ªÑ¡¿Ñ ¬áªñ«⌐
- Γ«τ¬¿ ¡á ½¿¡¿¿ ΓαÑíπÑΓ ¡á¿½πτΦÑ⌐ á»»α«¬ß¿¼áµ¿¿. é ¬áªñ«⌐ ¿ΓÑαᵿ¿
- µ¿¬½á óδτÑατ¿óá¡¿∩ ½¿¡¿¿ óδºδóáεΓß∩ ñóÑ »ÑαѼѡ¡δÑ xerr ¿ yerr,
- ¬«Γ«αδÑ πóѽ¿τ¿óáεΓß∩ ó ºáó¿ß¿¼«ßΓ¿ «Γ ¿º¼Ñ¡Ñ¡¿∩ óѽ¿τ¿¡
- ¬««αñ¿¡áΓ X ¿ Y ß««ΓóÑΓßΓóÑ¡¡«. è«úñá º¡áτÑ¡¿Ñ »«úαÑΦ¡«ßΓ¿
- ñ«ßΓ¿úáÑΓ «»αÑñѽѡ¡«ú« º¡áτÑ¡¿∩, «¡« ó¡«ó∞ πßΓá¡áó½¿óáÑΓß∩ ó
- ¿ßσ«ñ¡«Ñ »«½«ªÑ¡¿Ñ, á ß««ΓóÑΓßΓóπεΘ¿⌐ ßτÑΓτ¿¬ ¬««αñ¿¡áΓ
- πóѽ¿τ¿óáÑΓß∩. ¥Γ«Γ »α«µÑßß »α«ñ«½ªáÑΓß∩ ñ« ΓÑσ »«α, »«¬á ½¿¡¿∩
- ¡Ñ íπñÑΓ »«½¡«ßΓ∞ε óδτÑατÑ¡á. öπ¡¬µ¿∩ line(), »α¿óÑñÑ¡¡á∩ ¡¿ªÑ,
- αÑ὿ºπÑΓ φëà ¼ÑΓ«ñ. éδ ñ«½ª¡δ ¿ºπτáΓ∞ ÑÑ ñ« ΓÑσ »«α, »«¬á ¡Ñ
- »«⌐¼ÑΓÑ ¼Ñσá¡¿º¼á óδ»«½¡Ñ¡¿∩ óßÑσ ÑÑ «»Ñαᵿ⌐. çá¼ÑΓ¿¼, τΓ« ó ¡Ñ⌐
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 9 --
-
-
- ¿ß»«½∞ºπÑΓß∩ Σπ¡¬µ¿∩ mempoint(), αáºαáí«Γá¡¡á∩ αá¡ÑÑ ñ½∩
- «Γ«íαáªÑ¡¿∩ Γ«τ¬¿ ¡á φ¬αá¡Ñ ΓÑନ¡á½á.
-
-
- /* éδτÑατ¿óá¡¿Ñ ½¿¡¿¿ ºáñá¡¡«ú« µóÑΓá ß ¿ß»«½∞º«ó᡿Ѽ
- á½ú«α¿Γ¼á üαѺѡσá¼á */
- void line(startx,starty,endx,endy,color)
- int startx,starty,endx,endy,color;
- {
- register int t,distánce;
- int xerr=0,yerr=0,delta_x,delta_y;
- int incx,incy;
-
- /* óδτ¿ß½Ñ¡¿Ñ αáßßΓ«∩¡¿∩ ó «í«¿σ ¡á»αáó½Ñ¡¿∩σ */
- delta_x=endx-startx;
- delta_y=endy-starty;
-
- /* «»αÑñѽѡ¿Ñ ¡á»αáó½Ñ¡¿∩ Φáúá,
- Φáú óδτ¿ß½∩ÑΓß∩ ½¿í« »« óÑαΓ¿¬á½∞¡«⌐, ½¿í« ú«α¿º«¡Γá½∞¡«⌐
- ½¿¡¿¿ */
- if (delta_x>0) incx=1;
- else if (delta_x==0) incx=0;
- else incx= -1;
- if (delta_y>0) incy=1;
- else if (delta_y==0) incy=0;
- else incy= -1;
-
- /* «»αÑñѽѡ¿Ñ ¬á¬«Ñ αáßßΓ«∩¡¿Ñ í«½∞ΦÑ */
- delta_x=abs(delta_x);
- delta_y=abs(delta_y);
- if (delta_x>delta_y) distance=delta_x;
- else distance=delta_y;
-
- /* óδτÑατ¿óá¡¿Ñ ½¿¡¿¿ */
- for (t=0; t<=distance+1; t++) {
- mempoint(startx,starty,color);
- xerr+=delta_x;
- yerr+=delta_y;
- if (xerr>distance) {
- xerr-=distance;
- startx+=incx;
- }
- if (yerr>distance) {
- yerr-=distance;
- starty+=incy;
- }
- }
- }
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 10 --
-
-
- êçÄüÉÇåàìêà ê çÇèÉÇÿêéÇìêà ÅɃîÄôâÄï£ìêèÄé
- -----------------------------------------------------------------
-
- àß½¿ π óáß ÑßΓ∞ Σπ¡¬µ¿¿ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐, Γ« ¡Ñ ß«ßΓáó¿Γ
- «ß«í«ú« Γαπñá ß«ºñáΓ∞ Σπ¡¬µ¿¿ óδτÑατ¿óá¡¿∩ »α∩¼«πú«½∞¡¿¬«ó.
- Åα¿¼Ñα, »α¿óÑñÑ¡¡δ⌐ ºñÑß∞, óδτÑατ¿óáÑΓ »α∩¼«πú«½∞¡¿¬¿ ó ºáñá¡¡«¼
- µóÑΓÑ »πΓѼ ºáñá¡¿∩ ¬««αñ¿¡áΓ ñóπσ »α«Γ¿ó«»«½«ª¡δσ πú½«ó.
-
-
- /* éδτÑατ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á */
- void box(startx,starty,endx,endy,color_code)
- int startx,starty,endx,endy,color_code;
- {
- line(startx,starty,endx,starty,color_code);
- line(startx,starty,startx,endy,color_code);
- line(startx,endy,endx,endy,color_code);
- line(endx,starty,endx,endy,color_code);
- }
-
-
- ä½∩ Γ«ú«, τΓ«íδ ºá¬αáß¿Γ∞ »α∩¼«πú«½∞¡¿¬, ΓαÑíπÑΓß∩
- óδ»«½¡¿Γ∞ ºá»¿ß∞ ó ¬áªñπε Γ«τ¬π αáßΓαá ó¡πΓα¿ »α∩¼«πú«½∞¡¿¬á.
- Åα«úαá¼¼á fill_box(), »α¿óÑñÑ¡¡á∩ ¡¿ªÑ, ºá¬αáΦ¿óáÑΓ
- »α∩¼«πú«½∞¡¿¬, «»αÑñѽѡ¡δ⌐ ¬««αñ¿¡áΓἿ ñóπσ »α«Γ¿ó«»«½«ª¡δσ
- πú½«ó, ºáñá¡¡δ¼ µóÑΓ«¼. é ¡Ñ⌐ ¿ß»«½∞ºπÑΓß∩ Σπ¡¬µ¿∩ line(),
- ºáñáεΘá∩ µóÑΓ ó¡πΓα¿ »α∩¼«πú«½∞¡¿¬á.
-
-
- /* çá¬αáΦ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á ó ºáñá¡¡δ⌐ µóÑΓ */
- void fill_box(startx,starty,endx,endy,color_code)
- int startx,starty,endx,endy,color_code;
- {
- register int i,begin,end;
-
- begin=startx<endx ? startx:endx;
- end=startx>endx ? startx:endx;
-
- for (i=begin;i<=end;++i)
- line(i,starty,i,endy,color_code);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 11 --
-
-
- é¢ùàÉùêéÇìêà ÄèÉôåìÄæÆàë
- -----------------------------------------------------------------
-
- æá¼δ¼ íδßΓαδ¼ ¿ ½Ñú¬¿¼ ß»«ß«í«¼ óδτÑατ¿óá¡¿∩ «¬απª¡«ßΓÑ⌐
- ∩ó½∩ÑΓß∩ ß»«ß«í, «ß¡«óá¡¡δ⌐ ¡á ¿ß»«½∞º«óá¡¿¿ «»∩Γ∞ Γᬿ á½ú«α¿Γ¼á
- üαѺѡσá¼á, »«σ«ªÑú« ¡á «ñ¡«¿¼Ñ¡¡δ⌐ á½ú«α¿Γ¼ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐.
- äá¡¡δ⌐ ¼ÑΓ«ñ Γá¬ªÑ ¡Ñ ΓαÑíπÑΓ óδτ¿ß½Ñ¡¿⌐ τ¿ßѽ ß »½áóáεΘÑ⌐
- Γ«τ¬«⌐, ¬α«¼Ñ óδτ¿ß½Ñ¡¿∩ ¬«φΣΣ¿µ¿Ñ¡Γá ߪáΓ¿∩, »«φΓ«¼π «¡
- «íÑß»Ñτ¿óáÑΓ ñ«ßΓáΓ«τ¡«Ñ íδßΓα«ñÑ⌐ßΓó¿Ñ. Å« ßπΘÑßΓóπ, á½ú«α¿Γ¼
- «ß¡«óá¡ ¡á »α¿αáΘÑ¡¿¿ ¬««αñ¿¡áΓ X ¿ Y ¡á óѽ¿τ¿¡π »«úαÑΦ¡«ßΓ¿
- ¼Ñªñπ ¡¿¼¿. ç¡áτÑ¡¿Ñ »«úαÑΦ¡«ßΓ¿ ß«ñÑনΓß∩ ó »ÑαѼѡ«⌐ delta.
- öπ¡¬µ¿∩ plot_circle() óδ»«½¡∩ÑΓ ºá»¿ß∞ Γ«τѬ »« «¬απª¡«ßΓ¿.
- ÅÑαѼѡ¡á∩ asp_ratio ∩ó½∩ÑΓß∩ ú½«íá½∞¡«⌐, Γ.¬. «¡á ¿ß»«½∞ºπÑΓß∩
- ¬á¬ ó Σπ¡¬µ¿¿ circle(), Γᬠ¿ ó Σπ¡¬µ¿¿ plot_circle(). ¥Γá
- »ÑαѼѡ¡á∩ ¼«ªÑΓ íδΓ∞ »«½Ñº¡á ß Γ«τ¬¿ ºαÑ¡¿∩ 󫺼«ª¡«ßΓ¿
- πßΓá¡«ó½Ñ¡¿∩ ÑÑ º¡áτÑ¡¿∩ ó¡Ñ Σπ¡¬µ¿¿ circle() ¿ ñá½∞¡Ñ⌐ΦÑú«
- ¿ß»«½∞º«óá¡¿∩ ó¡πΓα¿ Σπ¡¬µ¿¿. ÅπΓѼ ¿º¼Ñ¡Ñ¡¿∩ º¡áτÑ¡¿∩ φΓ«⌐
- »ÑαѼѡ¡«⌐ óδ ¼«ªÑΓÑ α¿ß«óáΓ∞ φ½½¿»ßδ. Åáαá¼ÑΓαἿ Σπ¡¬µ¿¿
- circle() ∩ó½∩ÑΓß∩ µÑ¡Γα «¬απª¡«ßΓ¿, ÑÑ αáñ¿πß ¿ µóÑΓ. ÆÑ¬ßΓδ
- Σπ¡¬µ¿⌐ »α¿óÑñÑ¡δ ¡¿ªÑ.
-
-
- double asp_ratio;
-
- /* éδτÑατ¿óá¡¿Ñ «¬απª¡«ßΓ¿ ß ¿ß»«½∞º«ó᡿Ѽ á½ú«α¿Γ¼á
- üαѺѡσá¼á */
- void circle(x_center,y_center,radius,color_code)
- int x_center,y_center,radius,color_code;
- {
- register x,y,delta;
- asp_ratio=1.0; /* φΓ« τ¿ß½« ¼«ªÑΓ ¼Ñ¡∩ÑΓß∩ ó αẽ¿τ¡δσ
- ß½πτá∩σ */
- y=radius;
- delta=3-2*radius;
- for (x=0;x<y; ) {
- plot_circle(x,y,x_center,y_center,color_code);
- if (delta<0)
- delta+=4*x+6;
- else {
- delta+=4*(x-y)+10;
- y--;
- }
- x++;
- }
- x=y;
- if (y) plot_circle(x,y,x_center,y_center,color_code);
- }
-
- /* öπ¡¬µ¿∩ »ÑτáΓáÑΓ Γ«τ¬¿, «»αÑñѽ∩εΘ¿Ñ «¬απª¡«ßΓ∞ */
- void plot_circle(x,y,x_center,y_center,color_code)
- int x,y,x_center,y_center,color_code;
- {
- int startx,starty,endx,endy,x1,y1;
- starty=y*asp_ratio;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 12 --
-
-
- endy=(y+1)*asp_ratio;
- startx=x*asp_ratio;
- endx=(x+1)*asp_ratio;
-
- for (x1=startx;x1<endx;++x1) {
- mempoint(x1+x_center,y+y_center,color_code);
- mempoint(x1+x_center,y_center-y,color_code);
- mempoint(x_center-x1,y+y_center,color_code);
- mempoint(x_center-x1,y_center-y,color_code);
- }
-
- for (y1=starty;y1<endy;++y1) {
- mempoint(y1+x_center,x+y_center,color_code);
- mempoint(y1+x_center,y_center-x,color_code);
- mempoint(x_center-y1,x+y_center,color_code);
- mempoint(x_center-y1,y_center-x,color_code);
- }
- }
-
-
- çá¬αáΦ¿óáΓ∞ «¬απª¡«ßΓ∞ ¼«ª¡« »πΓѼ »«óΓ«α¡«ú« ó맮óá Σπ¡¬µ¿¿
- circle() ß ºáñ᡿Ѽ óßÑ í«½ÑÑ ¿ í«½ÑÑ ¼Ñ¡∞ΦÑú« αáñ¿πßá. ¥Γ«Γ
- ß»«ß«í ¿ß»«½∞ºπÑΓß∩ ó Σπ¡¬µ¿¿ fill_circle(), ΓѬßΓ ¬«Γ«α«⌐
- »α¿óÑñÑ¡ ¡¿ªÑ.
-
-
- /* çá¬αáΦ¿óá¡¿Ñ «¬απª¡«ßΓ¿ »πΓѼ »«óΓ«α¡«ú« ó맮óá
- circle() ß π¼Ñ¡∞ΦÑ¡¿Ñ¼ αáñ¿πßá */
-
- void fill_circle(x,y,r,c)
- int x,y,r,c;
- {
- while (r) {
- circle(x,y,r,c);
- r--;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 13 --
-
-
- ÅÉÄæÆàëÿǃ ÆàæÆÄéǃ ÅÉÄâÉÇîî¢
- -----------------------------------------------------------------
-
- Åα¿óÑñÑ¡¡δÑ ºñÑß∞ »α«úαá¼¼á ¿½½εßΓα¿απεΓ »α¿¼Ñ¡Ñ¡¿Ñ ¿
- 󫺼«ª¡«ßΓ¿ αá¡ÑÑ «»¿ßá¡¡δσ Σπ¡¬µ¿⌐ »«ññÑ᪬¿ úαáΣ¿¬¿.
-
- /* Åα«úαá¼¼á, ¿½½εßΓα¿απεΘá∩ αáí«Γπ úαáΣ¿τÑ߬¿σ
- Σπ¡¬µ¿⌐ */
- #include "dos.h"
- #include "stdio.h"
-
- void mode(),line(),box(),fill_box();
- void mempoint(),palette(),xhairs();
- void circle(),plot_circle(),fill_circle();
-
- double asp_ratio;
-
- main()
- {
- mode(4);
- palette(0);
- line(0,0,100,100,1);
- box(50,50,80,90,2);
- fill_box(100,0,120,40,3);
- circle(100,160,30,2);
- fill_circle(150,250,20,1);
- getchar();
- mode(2);
- }
- /* πßΓá¡«ó¬á »á½¿Γαδ */
-
- void palette(pnum)
- int pnum;
- {
- union REGS r;
-
- r.h.bh=1; /* ¬«ñ 4 αѪ¿¼á úαáΣ¿¬¿ */
- r.h.bl=pnum; /* ¡«¼Ñα »á½¿Γαδ */
- r.h.ah=11; /* πßΓá¡áó½¿óáÑΓßá ñ½∩ ó맮óá »á½¿Γαδ */
- int86(0x10,&r,&r);
- }
-
- /* ôßΓá¡«ó¬á ó¿ñÑ«αѪ¿¼á */
- void mode(mode_code)
- int mode_code;
- {
- union REGS r;
- r.h.al = mode_code;
- r.h.ah = 0;
- int86(0x10,&r,&r);
- }
-
- /* éδτÑατ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á */
- void box(startx,starty,endx,endy,color_code)
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 14 --
-
-
- int startx,starty,endx,endy,color_code;
- {
- line(startx,starty,endx,starty,color_code);
- line(startx,starty,startx,endy,color_code);
- line(startx,endy,endx,endy,color_code);
- line(endx,starty,endx,endy,color_code);
- }
-
- /* éδτÑατ¿óá¡¿Ñ ½¿¡¿¿ ºáñá¡¡«ú« µóÑΓá ß ¿ß»«½∞º«ó᡿Ѽ
- á½ú«α¿Γ¼á üαѺѡσá¼á */
- void line(startx,starty,endx,endy,color)
- int startx,starty,endx,endy,color;
- {
- register int t,distance;
- int xerr=0,yerr=0,delta_x,delta_y;
- int incx,incy;
-
- /* éδτ¿ß½Ñ¡¿Ñ αáßßΓ«∩¡¿∩ ó «í«¿σ ¡á»αáó½Ñ¡¿∩σ */
- delta_x=endx-startx;
- delta_y=endy-starty;
-
- /* Ä»αÑñѽѡ¿Ñ ¡á»αáó½Ñ¡¿∩ Φáúá,
- Φáú óδτ¿ß½∩ÑΓß∩ ½¿í« »« óÑαΓ¿¬á½∞¡«⌐, ½¿í« »« ú«α¿º«¡Γá½∞¡«⌐
- ½¿¡¿¿ */
- if (delta_x>0) incx=1;
- else if (delta_x==0) incx=0;
- else incx= -1;
-
- if (delta_y>0) incy=1;
- else if (delta_y==0) incy=0;
- else incy= -1;
-
- /* Ä»αÑñѽѡ¿Ñ ¬á¬«Ñ αáßßΓ«∩¡¿Ñ í«½∞ΦÑ */
- delta_x=abs(delta_x);
- delta_y=abs(delta_y);
- if (delta_x>delta_y) distance=delta_x;
- else distance=delta_y;
-
- /* éδτÑατ¿óá¡¿Ñ ½¿¡¿¿ */
- for (t=0; t<=distance+1; t++) {
- mempoint(startx,starty,color);
- xerr+=delta_x;
- yerr+=delta_y;
- if (xerr>distance) {
- xerr-=distance;
- startx+=incx;
- }
- if (yerr>distance) {
- yerr-=distance;
- starty+=incy;
- }
- }
- }
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 15 --
-
-
- /* çá¬αáΦ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á ºáñá¡¡δ¼ µóÑΓ«¼ */
-
- void fill_box(startx,starty,endx,endy,color_code)
- int startx,starty,endx,endy,color_code;
- {
- register int i,begin,end;
-
- begin=startx<endx ? startx:endx;
- end=startx>endx ? startx:endx;
-
- for (i=begin;i<=end;++i)
- line(i,starty,i,endy,color_code);
- }
-
-
- /* éδτÑατ¿óá¡¿Ñ «¬απª¡«ßΓ¿ ß ¿ß»«½∞º«ó᡿Ѽ á½ú«α¿Γ¼á
- üαѺѡσá¼á */
- void circle(x_center,y_center,radius,color_code)
- int x_center,y_center,radius,color_code;
- {
- register x,y,delta;
- asp_ratio=1.0; /* φΓ« τ¿ß½« ¼«ªÑΓ ¼Ñ¡∩ÑΓß∩ ó αẽ¿τ¡δσ
- ß½πτá∩σ */
- y=radius;
- delta=3-2*radius;
- for (x=0;x<y; ) {
- plot_circle(x,y,x_center,y_center,color_code);
- if (delta<0)
- delta+=4*x+6;
- else {
- delta+=4*(x-y)+10;
- y--;
- }
- x++;
- }
- x=y;
- if (y) plot_circle(x,y,x_center,y_center,color_code);
- }
-
- /* öπ¡¬µ¿∩ ¿º«íαáªáÑΓ Γ«τ¬¿, «»αÑñѽ∩εΘ¿Ñ «¬απª¡«ßΓ∞ */
- void plot_circle(x,y,x_center,y_center,color_code)
- int x,y,x_center,y_center,color_code;
- {
- int startx,starty,endx,endy,x1,y1;
- starty=y*asp_ratio;
- endy=(y+1)*asp_ratio;
- startx=x*asp_ratio;
- endx=(x+1)*asp_ratio;
-
- for (x1=startx;x1<endx;++x1) {
- mempoint(x1+x_center,y+y_center,color_code);
- mempoint(x1+x_center,y_center-y,color_code);
- mempoint(x_center-x1,y+y_center,color_code);
- mempoint(x_center-x1,y_center-y,color_code);
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 16 --
-
-
- }
-
- for (y1=starty;y1<endy;++y1) {
- mempoint(y1+x_center,x+y_center,color_code);
- mempoint(y1+x_center,y_center-x,color_code);
- mempoint(x_center-y1,x+y_center,color_code);
- mempoint(x_center-y1,y_center-x,color_code);
- }
- }
-
-
- /* çá¬αáΦ¿óá¡¿Ñ «¬απª¡«ßΓ¿ »πΓѼ »«óΓ«α¡«ú« ó맮óá
- circle() ß π¼Ñ¡∞ΦÑ¡¿Ñ¼ αáñ¿πßá */
- void fill_circle(x,y,r,c)
- int x,y,r,c;
- {
- while (r) {
- circle(x,y,r,c);
- r--;
- }
- }
-
- /* çỿß∞ Γ«τ¬¿ ó CGA/EGA */
- void mempoint(x,y,color_code)
- int x,y,color_code;
- {
- union mask {
- char c[2];
- int i;
- } bit_mask;
- int i,index,bit_position;
- unsigned char t;
- char xor; /* "¿ß¬½ετáεΘÑÑ êïê" µóÑΓá ó ß½πτáÑ Ñú«
- ¿º¼Ñ¡Ñ¡¿∩ */
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó »á¼∩Γ¿
- CGA */
- bit_mask.i=0xFF3F; /* 11111111 00111111 ó
- ñó«¿τ¡«¼ ó¿ñÑ */
- if (x<0 || x>199 || y<0 || y>319) return;
- xor=color_code & 128; /* »α«óÑα¬á, πßΓá¡áó½¿óá½ß∩ ½¿
- αѪ¿¼ "¿ß¬½ετáεΘÑú« êïê" */
- color_code=color_code & 127; /* ¼á߬á ßΓáαΦ¿σ í¿Γ«ó */
-
- /* ôßΓá¡«ó¬á ¼á߬¿ í¿Γ«ó ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
- ó »αáóπε »«º¿µ¿ε */
-
- bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿ ó íá⌐ΓÑ */
- color_code<<=2*(3-bit_position); /* ßñó¿ú ¬«ñá µóÑΓá
- ó ¡πª¡πε »«º¿µ¿ε */
- bit_mask.i>>=2*bit_position; /* ßñó¿ú í¿Γ«ó«⌐ ¼á߬¿ ó
- ¡πª¡πε »«º¿µ¿ε */
-
- /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 17 --
-
-
- index=x*40+(y%4);
- if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
- óΓ«α«⌐ í½«¬ */
-
- /* çỿß∞ µóÑΓá */
- if (!xor) { /* αѪ¿¼ ¿º¼Ñ¡Ñ¡¿∩ µóÑΓá */
- t=*(ptr+index) & bit_mask.c[0];
- *(ptr+index)=t|color_code;
- }
- else {
- t=*(ptr+index) | (char)0;
- *(ptr+index)=t & color_code;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 18 --
-
-
- æÄòÉÇìàìêà ê çÇâÉôçèÇ âÉÇöêùàæèêò êçÄüÉÇåàìêë
- -----------------------------------------------------------------
-
- æ«σαá¡Ñ¡¿Ñ ¿ ºáúαπº¬á úαáΣ¿τÑ߬¿σ ¿º«íαáªÑ¡¿⌐ ∩ó½∩ÑΓß∩
- ñ«ó«½∞¡« »α«ßΓδ¼ ñѽ«¼, Γ.¬. «íαẠ¿º«íαáªÑ¡¿⌐ ¡áσ«ñ¿Γß∩ ó
- ó¿ñÑ«»á¼∩Γ¿ ñ¿ß»½Ñ∩, á ÑÑ ß«ñÑন¼«Ñ ½Ñú¬« ¬«»¿α«óáΓ∞ ¡á ñ¿ß¬«óδ⌐
- Σá⌐½. â½áó¡«⌐ »α«í½Ñ¼«⌐ ∩ó½∩ÑΓß∩ ¡Ñ«íσ«ñ¿¼«ßΓ∞ óóÑñÑ¡¿∩
- »«½∞º«óáΓѽѼ ¿¼Ñ¡¿ Σá⌐½á, óó¿ñπ Γ«ú«, τΓ« ºá»α«ß « óó«ñÑ ¿
- óóÑñÑ¡¡«Ñ ¿¼∩ Σá⌐½á ß«ΓαπΓ τáßΓ∞ ¿¡Σ«α¼áµ¿¿ ¡á φ¬αá¡Ñ. ä½∩ Γ«ú«,
- τΓ«íδ ¿ºíѪáΓ∞ φΓ«ú«, αáºαáí«Γá¡δ Σπ¡¬µ¿¿ save_pic() ¿
- load_pic(), ΓѬßΓδ ¬«Γ«αδσ »α¿ó«ñ∩Γß∩ ó ñá¡¡«¼ αáºñѽÑ. ÅÑαóá∩
- Σπ¡¬µ¿∩ ß«σαá¡∩ÑΓ 14 óÑασ¡¿σ ßΓ᫬ ¿º«íαáªÑ¡¿∩, τ¿ßΓ¿Γ φΓπ
- «í½áßΓ∞, ºá»αáΦ¿óáÑΓ ¿¼∩ Σá⌐½á ¿, »«ß½Ñ Γ«ú«, ¬á¬ «¡« íπñÑΓ
- óóÑñÑ¡«, ó«ßßΓá¡áó½¿óáÑΓ ¿º«íαáªÑ¡¿Ñ.
-
-
- /* ß«σαá¡Ñ¡¿Ñ úαáΣ¿τÑ߬«ú« ¿º«íαáªÑ¡¿∩ */
- void save_pic()
- {
- char fname[80];
- FILE *fp;
- register int i,j;
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
- »á¼∩Γ¿ CGA */
- char far *temp;
- unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
-
- temp=ptr;
- /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;++j) {
- buf[i][j]=*temp; /* τÑΓ¡δ⌐ íá⌐Γ */
- buf[i][j+1]=*(temp+8152); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
- *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
- temp++;
- }
- goto_xy(0,0);
- printf("ê¼∩ Σá⌐½á:");
- gets(fname);
- if (!(fp=fopen(fname,"wb"))) {
- printf("öóá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ\n");
- return;
- }
-
- temp=ptr;
- /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;++j) {
- *temp= buf[i][j]; /* τÑΓ¡δ⌐ íá⌐Γ */
- *(temp+8125)=buf[i][j+1]; /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
- *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
- temp++;
- }
- /* ¬«»¿α«óá¡¿Ñ ¿º«íαáªÑ¡¿∩ ó Σá⌐½ */
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 19 --
-
-
- for (i=0;i<8152;i++) {
- putc(*ptr,fp); /* τÑΓ¡δ⌐ íá⌐Γ */
- putc(*(ptr+8125),fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
- ptr++;
- }
-
- fclose(fp);
- }
-
- /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ */
- void load_pic()
- {
- char fname[80];
- FILE *fp;
- register int i,j;
-
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
- »á¼∩Γ¿ CGA */
- char far *temp;
- unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
-
- temp=ptr;
- /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;j+=2) {
- buf[i][j]=*temp;
- buf[i][j+1]=*(temp+8152);
- *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
- temp++;
- }
- goto_xy(0,0);
- printf("ê¼∩ Σá⌐½á:");
- gets(fname);
- if (!(fp=fopen(fname,"rb"))) {
- goto_xy(0,0);
- printf("öá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ\n");
- temp=ptr;
- /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;j+=2) {
- *temp= buf[i][j];
- *(temp+8125)=buf[i][j+1];
- temp++;
- }
- return;
- }
- /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ ¿º Σá⌐½á */
- for (i=0;i<8152;i++) {
- *ptr=getc(fp); /* τÑΓ¡δ⌐ íá⌐Γ */
- *(ptr+8125)=getc(fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
- ptr++;
- }
-
- fclose(fp);
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 20 --
-
-
- }
-
- Å«ñ»α«úαá¼¼δ ¡áτ¿¡áεΓ «íαáí«Γ¬π ó¿ñÑ«»á¼∩Γ¿, ¡áτ¿¡á∩ ß
- áñαÑßá, ß«ñÑαªáΘÑú«ß∩ ó π¬áºáΓÑ½Ñ temp ßτ¿Γδóá∩ ¿½¿ ºá»¿ßδóá∩
- ¬áªñδ⌐ τÑΓ¡δ⌐ ¿ ¡ÑτÑΓ¡δ⌐ íá⌐Γδ ó »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩ ¿σ áñαÑß«ó.
- Æá¬«⌐ »«ñσ«ñ »«ºó«½∩ÑΓ ñ«í¿Γ∞ß∩ »α«ßΓ«Γδ ¿ ¡áú½∩ñ¡«ßΓ¿
- Σπ¡¬µ¿«¡¿α«óá¡¿∩ αáßß¼«ΓαÑ¡¡δσ óδΦÑ »«ñ»α«úαá¼¼. é ß½πτáÑ
- «íαáí«Γ¬¿ ó¿ñÑ«»á¼∩Γ¿ ó »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩ áñαÑß«ó, ó¡áτá½Ñ
- íπñÑΓ «Γ«íαáªáΓ∞ß∩ τÑΓ¡á∩ Γ«τ¬á αáßΓαá, á ºáΓѼ - ¡ÑτÑΓ¡á∩.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 21 --
-
-
- äôüïêÉÄéÇìêà ùÇæÆê ¥èÉÇìÇ
- -----------------------------------------------------------------
-
- ê¡«úñá íδóáÑΓ »«½Ñº¡δ¼ ߬«»¿α«óáΓ∞ τáßΓ∞ φ¬αá¡á ó ñαπúπε
- «í½áßΓ∞. ¥Γ« ½Ñú¬« óδ»«½¡¿Γ∞ ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε copy(), ΓѬßΓ
- ¬«Γ«α«⌐ »α¿ó«ñ¿Γß∩ ¡¿ªÑ.
-
- /* ¬«»¿α«óá¡¿Ñ τáßΓ¿ φ¬αá¡á ó ñαπúπε «í½áßΓ∞ */
- void copy(startx,starty,endx,endy,x,y)
- int startx,starty; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá */
- int endx,endy; /* ¡¿ª¡∩∩ »αáóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿
- ¬«»¿α«óá¡¿∩ */
- int x,y; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿,
- ¬πñá íπñÑΓ »α«ó«ñ¿Γß∩ ¬«»¿α«óá¡¿Ñ */
- {
- int i,j;
- unsigned char c;
-
- for (;startx<endx;startx++,x++)
- for (i=starty,j=y;i<endy;i++,j++) {
- c=read_point(startx,i); /* τΓÑ¡¿Ñ Γ«τ¬¿ */
- mempoint(x,j,c); /* ºá»¿ß∞ ÑÑ ó ¡«óπε «í½áßΓ∞ */
- }
- }
-
-
- èᬠóδ ¼«ú½¿ πíÑñ¿Γ∞ß∩, »α¿ «íαáΘÑ¡¿¿ ¬ Σπ¡¬µ¿¿¼ ó ¬áτÑßΓóÑ
- ÑÑ áαúπ¼Ñ¡Γ«ó π¬áºδóáεΓß∩ óÑασ¡∩∩ ½Ñóá∩ ¿ ¡¿ª¡∩∩ »αáóá∩
- ¬««αñ¿¡áΓδ πú½«ó «í½áßΓ¿, ¬«Γ«αá∩ íπñÑΓ ¬«»¿α«óáΓ∞ß∩, ¿ óÑασ¡∩∩
- ½Ñóá∩ ¬««αñ¿¡áΓδ, ¬πñá ñѽáÑΓß∩ ¬«»¿∩.
-
- éδ Γá¬ªÑ ¼«ªÑΓÑ πíÑñ¿Γß∩, τΓ« ß ¡Ñí«½∞Φ¿¼¿ ¿º¼Ñ¡Ñ¡¿∩¼¿
- Σπ¡¬µ¿ε copy() ¼«ª¡« »αÑ«íαẫóáΓ∞ ó Σπ¡¬µ¿ε move(). öπ¡¬µ¿∩
- move() »ÑαÑßδ½áÑΓ π¬áºá¡¡πε «í½áßΓ∞ ó ñαπúπε ¿ τ¿ßΓ¿Γ ¿ßσ«ñ¡«Ñ
- ¼ÑßΓ«. ÆÑ¬ßΓ Σπ¡¬µ¿¿ »α¿ó«ñ¿Γß∩ ¡¿ªÑ.
-
-
-
- /* ÅÑαÑß佬á τáßΓ¿ φ¬αá¡á ó ñαπúπε «í½áßΓ∞ */
- void move(startx,starty,endx,endy,x,y)
- int startx,starty; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá */
- int endx,endy; /* ¡¿ª¡∩∩ »αáóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿
- »ÑαÑß佬¿ */
- int x,y; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿,
- ¬πñá íπñÑΓ »α«ó«ñ¿Γß∩ »ÑαÑß佬á */
- {
- int i,j;
- unsigned char c;
-
- for (;startx<endx;startx++,x++)
- for (i=starty;j=y;i<endy;i++,j++) {
- c=read_point(startx,i); /* τΓÑ¡¿Ñ Γ«τ¬¿ */
- mempoint(startx,i,0); /* ßΓ¿αá¡¿Ñ ßΓáα«ú«
- ¿º«íαáªÑ¡¿∩ */
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 22 --
-
-
- mempoint(x,j,c); /* ºá»¿ß∞ Γ«τ¬¿ ó ¡«óπε «í½áßΓ∞ */
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 23 --
-
-
- éÉÇÖàìêà ÆÄùèê é ÅïÄæèÄæÆê ¥èÉÇìÇ
- -----------------------------------------------------------------
-
- éαáΘÑ¡¿Ñ Γ«τ¬¿ ó »½«ß¬«ßΓ¿ φ¬αá¡á (ñóπ¼Ñα¡«¼ »α«ßΓαá¡ßΓóÑ)
- »αÑñßΓáó½∩ÑΓ ß«í«⌐ ñ«ó«½∞¡« »α«ßΓπε ºáñáτπ ó ñѬáαΓ«ó«⌐ ß¿ßΓѼÑ
- ¬««αñ¿¡áΓ. éδ ¼«ªÑΓÑ óß»«¼¡¿Γ∞ ¿º ¬παßá á¡á½¿Γ¿τÑ߬«⌐ úÑ«¼ÑΓα¿¿,
- τΓ« óαáΘÑ¡¿Ñ Γ«τ¬¿ ó«¬απú µÑ¡Γαá ¡á πú«½ theta, «»¿ßδóáÑΓß∩
- Σ«α¼π½«⌐:
-
- new_x = old_x * cos(theta) - old_y * sin(theta)
- new_y = old_x * sin(theta) - old_y * cos(theta)
-
- àñ¿¡ßΓóÑ¡¡«⌐ ß½«ª¡«ßΓ∞ε »α¿ π»«ΓαÑí½Ñ¡¿¿ φΓ¿σ Σ«α¼π½ ñ½∩
- úαáΣ¿τÑ߬¿σ ñ¿ß»½ÑÑó íπñÑΓ ∩ó½∩Γß∩ ëà Σá¬Γ, τΓ« φ¬αá¡ ñ¿ß»½Ñ∩ ¡Ñ
- ∩ó½∩ÑΓß∩ ñѬáαΓ«óδ¼ »α«ßΓαá¡ßΓó«¼. äѬáαΓ«óδ «ß¿ «»αÑñѽ∩εΓ 4
- ¬óáñαá¡Γá, ¬á¬ φΓ« »«¬áºá¡« ¡á α¿ßπ¡¬Ñ 4-2. Äñ¡á¬« φ¬αá¡
- ΓÑନ¡á½á »αÑñßΓáó½∩ÑΓ ß«í«⌐ «ñ¿¡ ¿º ¬óáñαá¡Γ«ó, «ß¿ X ¿ Y ó
- ¬«Γ«α«¼ »ÑαÑóÑα¡πΓδ. ä½∩ αÑΦÑ¡¿∩ φΓ«⌐ »α«í½Ñ¼δ ¡Ñ«íσ«ñ¿¼«
- «»αÑñѽ¿Γ∞ ¡«óδ⌐ µÑ¡Γα ¿ »α¿óÑßΓ¿ ó ß««ΓóÑΓßΓó¿Ñ ¬««αñ¿¡áΓδ X ¿ Y
- φ¬αá¡á ¿ ¬««αñ¿¡áΓδ «ßÑ⌐ ñѬáαΓ«óá »α«ßΓαá¡ßΓóá. ïεíá∩ Γ«τ¬á ¡á
- φ¬αá¡Ñ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡á ó ¬áτÑßΓóÑ µÑ¡Γαá, ¡« «íδτ¡« µÑ¡Γα
- «»αÑñѽ∩ÑΓß∩ ¬á¬ ¼«ª¡« í½¿ªÑ ¬ µÑ¡Γαπ «íΩѬΓá, ¬«Γ«αδ⌐ ¼δ
- ß«í¿αáѼß∩ óαáΘáΓ∞. öπ¡¬µ¿∩ rotate_point(), »α¿óÑñÑ¡¡á∩ ¡¿ªÑ,
- óδτ¿ß½∩ÑΓ óѽ¿τ¿¡π ¡«óδσ º¡áτÑ¡¿⌐ X ¿ Y ñ½∩ ºáñá¡¡«ú« πú½á
- óαáΘÑ¡¿∩.
-
-
- /* éαáΘÑ¡¿Ñ Γ«τ¬¿ ó«¬απú µÑ¡Γαá ß ¬««αñ¿¡áΓἿ
- x_org ¿ y_org ¡á πú«½ theta */
- void rotate_point(theta,x,y,x_org,y_org)
- double theta,*x,*y;
- int x_org,y_org;
- {
- double tx,ty;
-
- /* ¡«α¼á½¿ºáµ¿∩ X ¿ Y ¬ ¡áτá½∞¡«¼π áñαÑßπ */
- tx=*x-x_org;
- ty=*y-y_org;
-
- /* óαáΘÑ¡¿Ñ */
- *x=tx*cos(theta)-ty*sin(theta);
- *y=tx*sin(theta)-ty*cos(theta);
-
- /* ó«ºóαáΘÑ¡¿Ñ º¡áτÑ¡¿⌐ ¬««αñ¿¡áΓ */
- *x+=x_org;
- *y+=y_org;
- }
-
-
- çá¼ÑΓ¿¼, τΓ« rotate_point() ¿º¼Ñ¡∩ÑΓ »áαá¼ÑΓαδ X ¿ Y »πΓѼ
- »α¿ßó«Ñ¡¿∩ ¿¼ ΓαÑíπѼ«ú« º¡áτÑ¡¿Ñ ñ½∩ »«½πτÑ¡¿∩ πú½á óαáΘÑ¡¿∩,
- ºáñá¡¡«ú« »ÑαѼѡ¡«⌐ theta. ôú«½ óαáΘÑ¡¿∩ ºáñáÑΓß∩ ó αáñ¿á¡áσ.
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 24 --
-
-
- ┌──────────────────────────────────────────────────────────────┐
- │ │
- │ äѬáαΓ«óá ß¿ßΓÑ¼á ¬««αñ¿¡áΓ Y │
- │ II ^ I │
- │ +,- │ +,+ │
- │ │ │
- │ │0.0 │
- │ ─────────┼───────── X │
- │ │ │
- │ -,- │ -,+ │
- │ │ │
- │ III ∙ IV │
- │ │
- │ │
- │ 0.0 │
- │ âαáΣ¿τÑ߬¿⌐ φ¬αá¡ ┌────────── Y │
- │ │ │
- │ │ +,+ │
- │ │ │
- │ ∙ │
- │ X │
- └──────────────────────────────────────────────────────────────┘
-
- É¿ß. 4-2. äѬáαΓ«óδ ¬««αñ¿¡áΓδ ¡á úαáΣ¿τÑ߬«¼ φ¬αá¡Ñ.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 25 --
-
-
- éαáΘÑ¡¿Ñ «í∞ѬΓá
- ----------------
-
- ò«Γ∩ Σπ¡¬µ¿∩ rotate_point(), óδτ¿ß½∩εΘá∩ ΓαÑíπѼδÑ º¡áτÑ¡¿∩
- ¬««αñ¿¡áΓ X ¿ Y »α¿ óαáΘÑ¡¿¿ Γ«τ¬¿, πªÑ íδ½á ¡á¼¿ αáßß¼«ΓαÑ¡á.
- Äñ¡á¬«, «¡á ¡Ñ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡á ñ½∩ óαáΘÑ¡¿∩ (»«ó«α«Γ«ó)
- «íΩÑ¬Γ«ó. ä½∩ φΓ«ú« ¡Ñ«íσ«ñ¿¼á ñαπúá∩ Σπ¡¬µ¿∩. Å«ñ «íΩÑ¬Γ«¼ ºñÑß∞
- ¿ ñá½ÑÑ íπñѼ »«¡¿¼áΓ∞ ¡áí«α ßÑú¼Ñ¡Γ«ó »α∩¼δσ «ΓαѺ¬«ó.
- è««αñ¿¡áΓδ ¬αá⌐¡¿σ Γ«τѬ ¬áªñ«ú« «ΓαѺ¬á ß«ñÑαªáΓß∩ ó ñóπ¼Ñα¡«¼
- ¼áßß¿óÑ τ¿ßѽ ß »½áóáεΘÑ⌐ Γ«τ¬«⌐. èáªñá∩ ßΓα«¬á ¼áßß¿óá ß«ñÑনΓ
- ¡áτá½∞¡δÑ ¿ ¬«¡Ñτ¡δÑ ¬««αñ¿¡áΓδ ñá¡¡«ú« «ΓαѺ¬á. ¥Γ« «º¡áτáÑΓ,
- τΓ« »Ñαóá∩ αẼÑα¡«ßΓ∞ ¼áßß¿óá »αÑñßΓáó½∩ÑΓ ß«í«⌐ ¬«½¿τÑßΓó«
- «ΓαѺ¬«ó, óσ«ñ∩Θ¿σ ó ß«ßΓáó «íΩѬΓá, á óΓ«αá∩ αẼÑα¡«ßΓ∞ íπñÑΓ
- αáó¡á 4 (τ¿ß½« ¬««αñ¿¡áΓ ¬αá⌐¡¿σ Γ«τѬ «ΓαѺ¬á). ìá»α¿¼Ñα,
- ¼áßß¿ó, »α¿óÑñÑ¡¡δ⌐ ¡¿ªÑ
-
- double object [10][4];
-
- «»αÑñѽ∩ÑΓ «íΩѬΓ, ß«ßΓ«∩Θ¿⌐ ¿º 10 «ΓαѺ¬«ó.
-
- èᬠ»αá󿽫, ¼áßß¿ó «αúá¡¿ºπÑΓß∩ Γá¬, ¬á¬ »«¬áºá¡« ¡á
- α¿ßπ¡¬Ñ 4-3.
-
- ┌───────────────────────────────────────────────────────────────┐
- │ │
- │ ÅÑαóδ⌐ éΓ«α«⌐ ────────> │
- │ ¿¡ñÑ¬ß ¿¡ñÑ¬ß │
- │ │
- │ │ 0 1 2 3 │
- │ │ │
- │ │ │
- │ V │
- │ │
- │ 0 start_X1 start_Y1 end_X1 end_Y1 │
- │ │
- │ 1 start_X2 start_Y2 end_X2 end_Y2 │
- │ │
- │ 2 start_X3 start_Y3 end_X3 end_Y3 │
- │ │
- │ 3 start_X4 start_Y4 end_X4 end_Y4 │
- │ . . │
- │ . . │
- │ . . │
- │ n start_Xn start_Yn end_Xn end_Yn │
- └───────────────────────────────────────────────────────────────┘
-
- É¿ß. 4-3. ôß½«ó¡á∩ «αúá¡¿ºáµ¿∩ ¼áßß¿óá.
-
-
- Ä»αÑñѽ¿Γ∞ «íΩÑ¬Γ - φΓ« º¡áτ¿Γ αẼÑßΓ¿Γ∞ ó ¼áßß¿óÑ
- ¬««αñ¿¡áΓδ ¡áτá½∞¡δσ ¿ ¬«¡Ñτ¡δσ Γ«τѬ «ΓαѺ¬«ó, ß«ßΓáó½∩εΘ¿σ
- «íΩѬΓ. ìá»α¿¼Ñα, Ñß½¿ «íΩÑ¬Γ »αÑñßΓáó½∩ÑΓ ß«í«⌐ »α∩¼«πú«½∞¡¿¬
- ó¿ñá:
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 26 --
-
-
- 0.0┌─────────────────┐0.10
- │ │
- │ │
- │ │
- │ │
- 10.0└─────────────────┘10.10
-
- Γ« ó ¼áßß¿ó, «»αÑñѽ∩εΘ¿⌐ ñá¡¡δ⌐ »α∩¼«πú«½∞¡¿¬, ºá¡«ß∩Γß∩
- ß½ÑñπεΘ¿Ñ τ¿ß½á:
-
- object[0][0] = 0; object[0][1] = 0;
- object[0][0] = 0; object[0][3] = 10;
-
- object[1][0] = 0; object[1][1] = 10;
- object[1][0] = 10; object[1][3] = 10;
-
- object[2][0] = 10; object[2][1] = 10;
- object[2][0] = 10; object[2][3] = 0;
-
- object[3][0] = 10; object[3][1] = 0;
- object[3][0] = 0; object[3][3] = 0;
-
- Å«ß½Ñ Γ«ú«, ¬á¬ «íΩÑ¬Γ «»αÑñѽѡ, óδ ¼«ªÑΓÑ óαáΘáΓ∞ Ñú«,
- ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε rotate_object(), »α¿óÑñÑ¡¡πε ¡¿ªÑ, »« τáß«ó«⌐
- ßΓαѽ¬Ñ (¬½áó¿Φá <R>) ¿½¿ ó »α«Γ¿ó«»«½«ª¡πε ßΓ«α«¡π (¬½áó¿Φá
- <L>).
-
-
- /* éαáΘÑ¡¿Ñ ºáñá¡¡δσ «íΩÑ¬Γ«ó */
-
- void rotate_object(ob, theta, x, y, sides)
- double ob[][4]; /* «»¿ßá¡¿Ñ «íΩѬΓá */
- double theta; /* πú«½ »«ó«α«Γá ó αáñ¿á¡áσ */
- int x, y;
- int sides;
- {
- register int i, j;
- double tempx, tempy;
- char ch;
-
- for(;;)
- {
- ch = getch(); /* óó«ñ »α¿º¡á¬á ¡á»αáó½Ñ¡¿∩ óαáΘÑ¡¿∩ */
- switch(tolower(ch))
- {
- case 'l': /* óαáΘÑ¡¿Ñ »α«Γ¿ó τáß«ó«⌐ ßΓαѽ¬¿ */
- theta = theta < 0 ? -theta : theta;
- break;
- case 'r': /* óαáΘÑ¡¿Ñ »« τáß«ó«⌐ ßΓαѽ¬Ñ */
- theta = theta > 0 ? -theta : theta;
- break;
- default: return;
- }
- for(j=0; j<=sides; j++) /* ßΓ¿αá¡¿Ñ ßΓáαδσ ½¿¡¿⌐ */
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 27 --
-
-
- {
- line((int) ob[j][0], (int) ob[j][1],
- (int) ob[j][2], (int) ob[j][3], 0);
- rotate_point(theta, &ob[j][0],
- &ob[j][1], x, y);
- rotate_point(theta, &ob[j][2], &ob[j][3], x, y);
- line((int) ob[j][0], (int) ob[j][1],
- (int) ob[j][2], (int) ob[j][3], 2);
- }
- }
- }
-
- èᬠ»«¬áºá¡« ó «»¿ßá¡¿¿ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ rotate_object(),
- óαáΘÑ¡¿Ñ «ßπΘÑßΓó½∩ÑΓß∩ ó«¬απú µÑ¡Γαá, ºáñá¡¡«ú« ¬««αñ¿¡áΓἿ X ¿
- Y, ¡á πú«½, óѽ¿τ¿¡á ¬«Γ«α«ú« ºáñá¡á »áαá¼ÑΓα«¼ theta ó αáñ¿á¡áσ.
- î¿¡¿¼á½∞¡«Ñ º¡áτÑ¡¿Ñ »áαá¼ÑΓαá theta αáó¡« 0.01 αáñ¿á¡. çá¼ÑΓ¿¼,
- τΓ« «íΩÑ¬Γ ß¡áτá½á ßΓ¿αáÑΓß∩ ¿º ßΓáα«⌐ «í½áßΓ¿ αẼÑΘÑ¡¿∩, á
- ºáΓѼ »ÑαÑα¿ß«óδóáÑΓß∩ ó¡«ó∞. àß½¿ φΓ« πß½«ó¿Ñ ¡Ñ ¼«ªÑΓ íδΓ∞
- óδ»«½¡Ñ¡«, Γ« φ¬αá¡ «¬αáΦ¿óáÑΓß∩ ó ú«½πí«⌐ µóÑΓ. ìÑ«íσ«ñ¿¼δ¼
- πß½«ó¿Ñ¼ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ rotate_object() ∩ó½∩ÑΓß∩
- «í∩ºáΓѽ∞¡«Ñ ºáñá¡¿Ñ »áαá¼ÑΓαá sides.
-
- Åα¿óÑñÑ¡¡á∩ ¡¿ªÑ Σπ¡¬µ¿∩ display_object() ¡Ñ ¿¼ÑÑΓ «Γ¡«ΦÑ¡¿∩
- ¬ óαáΘÑ¡¿ε «íΩÑ¬Γ«ó, ¡« «¡á ¼«ªÑΓ íδΓ∞ »«½Ñº¡á »α¿ αáí«ΓÑ ß
- «íΩѬΓἿ. Ä¡á α¿ßπÑΓ ¡á φ¬αá¡Ñ «íΩѬΓδ, «»αÑñѽѡ¡δÑ ó ¼áßß¿óÑ
- ob.
-
- /* «Γ«íαáªÑ¡¿Ñ «íΩѬΓá ¡á φ¬αá¡Ñ */
- void display_object(ob, sides)
- double ob[][4];
- int sides;
- {
- register int i;
-
- for(i=0; i<sides; i++)
- line((int)ob[i][0], (int)ob[i][1],
- (int)ob[i][2], (int)ob[i][3], 2);
- }
-
- é ¬áτÑßΓóÑ ¿½½εßΓαᵿ¿ πñ«íßΓóá ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿⌐
- óαáΘÑ¡¿∩ «íΩÑ¬Γ«ó ¡¿ªÑ »α¿ó«ñ∩Γß∩ »α«úαá¼¼δ óαáΘÑ¡¿∩ ¿º«íαáªÑ¡¿∩
- ñ«¼á. ìá α¿ßπ¡¬Ñ 4-4 »«¬áºá¡« ¿º«íαáªÑ¡¿Ñ ¡á φ¬αá¡Ñ ΓÑନ¡á½á
- ñ«¼á »α¿ αẽ¿τ¡δσ πú½áσ »«ó«α«Γá ó«¬απú ß«íßΓóÑ¡¡«ú« µÑ¡Γαá.
- Åα∩¼«πú«½∞¡¿¬, «íαá¼½∩εΘ¿⌐ ¿º«íαáªÑ¡¿Ñ óαáΘáѼ«ú« ñ«¼á, »«¼«ªÑΓ
- óá¼ »αáó¿½∞¡« «µÑ¡¿Γ∞ ¼áßΦΓáí ¿ »Ñαß»Ñ¬Γ¿óπ.
-
- _________________________________________________________________
-
- Åα¿¼. »Ñα. É¿ßπ¡«¬ 4-4 ¡Ñ ¼«ªÑΓ íδΓ∞ ó«ß»α«¿ºóÑñÑ¡ ¿¼ÑεΘ¿¼¿ß∩
- ßαÑñßΓóἿ.
- _________________________________________________________________
-
- É¿ß. 4-4. éαáΘÑ¡¿Ñ «íΩѬΓá.
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 28 --
-
-
-
- /* Åα¿¼Ñα óαáΘÑ¡¿∩ ¿º«íαáªÑ¡¿∩ «íΩѬΓá ß ¿ß»«½∞º«ó᡿Ѽ
- áñá»ΓÑαá CGA/EGA ó 4 úαáΣ¿τÑ߬«¼ αѪ¿¼Ñ
- */
-
- #include "dos.h"
- #include "stdio.h"
- #include "math.h"
-
- void mode(), line(), mempoint(), palette();
- void rotate_point(), rotate_object(), display_object();
-
- /* ¼áßß¿ó house «»αÑñѽ∩ÑΓ ¿º«íαáªÑ¡¿Ñ ñ«¼á */
- double house[][4] =
- {
- /* startx, starty, endx, endy */
- 120, 120, 120, 200, /* ñ«¼ */
- 120, 200, 80, 200,
- 80, 120, 80, 200,
- 80, 120, 120, 120,
- 60, 160, 80, 120, /* ¬αδΦa*/
- 60, 160, 80, 200,
- 120, 155, 100, 155, /* ñóÑα¿*/
- 100, 155, 100, 165,
- 100, 165, 120, 165,
- 90, 130, 100, 130, /* «¬¡á */
- 90, 130, 90, 140,
- 100, 130, 100, 140,
- 90, 140, 100, 140,
- 90, 180, 100, 180,
- 90, 180, 90, 190,
- 100, 180, 100, 190
- };
- main()
- {
- union k
- {
- char c[2];
- int i;
- } key;
-
- mode(4); /* αѪ¿¼ = 4 */
- palette(0); /* »á½¿Γαá = 0 */
-
- /* α¿ßπ¡«¬ αἬ¿,«íαá¼½∩εΘÑ⌐ ñ«¼ */
- line (30, 70, 30, 260, 2);
- line (160, 70, 160, 260, 2);
- line (30, 70, 160, 70, 2);
- line (30, 260, 160, 260, 2);
-
- display_object(house, 17);
- getchar();
- rotate_object(house, 0.025, 90, 160, 17);
- mode(3);
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 29 --
-
-
- }
-
- /* éδí«α »á½¿Γαδ */
- void palette(pnum)
- int pnum;
- {
- union REGS r;
-
- r.h.bh = 1; /* ¬«ñ 4 úαáΣ¿τÑ߬«ú« αѪ¿¼á */
- r.h.bl = pnum;
- r.h.ah = 11;
- int86(0x10, &r, &r);
- }
-
- /* éδí«α αѪ¿¼á */
- void mode(mode_code)
- int mode_code;
- {
- union REGS r;
-
- r.h.al = mode_code;
- r.h.ah = 0;
- int86(0x10, &r, &r);
- }
-
- /* É¿ßπ¡«¬ «ΓαѺ¬á »α∩¼«⌐ ºáñá¡¡«ú« µóÑΓá */
- void line(start_x, start_y, endx, endy, color)
- int start_x, start_y, endx, endy, color;
- {
- register int t, distance;
- int x=0, y=0, delta_x, delta_y;
- int incx, incy;
-
- /* óδτ¿ß½Ñ¡¿Ñ »α¿αáΘÑ¡¿⌐ »« x ¿ »« y */
- delta_x = endx-start_x;
- delta_y = endy-start_y;
-
- /* óδτ¿ß½Ñ¡¿Ñ »α¿º¡á¬«ó ¡á»αáó½Ñ¡¿⌐ «ΓαѺ¬á */
- if(delta_x>0)
- incx=1;
- else
- if(delta_x==0)
- incx=0;
- else
- incx= -1;
- if(delta_y>0)
- incy=1;
- else
- if(delta_y==0)
- incy=0;
- else
- incy= -1;
- delta_x=abs(delta_x);
- delta_y=abs(delta_y);
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 30 --
-
-
- if(delta_x>delta_y)
- distance=delta_x;
- else
- distance=delta_y;
-
- /* α¿ßπ¡«¬ «ΓαѺ¬á */
- for(t=0; t<=distance; t++)
- {
- mempoint(start_x, start_y, color);
- x+=delta_x;
- y+=delta_y;
- if(x>distance)
- {
- x-=distance;
- start_x+=incx;
- }
- if(y>distance)
- {
- y-=distance;
- start_y+=incy;
- }
- }
- }
-
- /* ºá»¿ß∞ Γ«τ¬¿ ó CGA/EGA */
-
- void mempoint(x,y,color_code)
- int x,y,color_code;
- {
- union mask {
- char c[2];
- int i;
- } bit_mask;
- int i,index,bit_position;
- unsigned char t;
- char xor; /* "ìà-êïê" µóÑΓá ó ß½πτáÑ Ñú«
- ¿º¼Ñ¡Ñ¡¿∩ */
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
- »á¼∩Γ¿ CGA */
- bit_mask.i=0xFF3F; /* 11111111 00111111 ó
- ñó«¿τ¡«¼ ó¿ñÑ */
- if (x<0 || x>199 || y<0 || y>319) return;
- xor=color_code & 128; /* »α«óÑα¬á, πßΓá¡áó½¿óá½ß∩ ½¿
- αѪ¿¼ "ìà-êïê" */
- color_code=color_code & 127; /* ¼á߬á ßΓáαΦ¿σ í¿Γ«ó */
-
- /* πßΓá¡«ó¬á í¿Γ«ó«⌐ ¼á߬¿ ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
- ó »αáóπε »«º¿µ¿ε */
-
- bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿
- ó íá⌐ΓÑ */
- color_code<<=2*(3-bit_position); /* ßñó¿ú ¬«ñá µóÑΓá
- ó ¡πª¡πε »«º¿µ¿ε */
- bit_mask.i>>=2*bit_position; /* ßñó¿ú í¿Γ«ó«⌐ ¼á߬¿ ó
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 31 --
-
-
- ¡πª¡πε »«º¿µ¿ε */
-
- /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
-
- index=x*40+(y%4);
- if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
- óΓ«α«⌐ í½«¬ */
-
- /* ºá»¿ß∞ µóÑΓá */
-
- if (!xor) { /* αѪ¿¼ ¿º¼Ñ¡Ñ¡¿∩ µóÑΓá */
- t=*(ptr+index) & bit_mask.c[0];
- *(ptr+index)=t|color_code;
- }
- else {
- t=*(ptr+index) | (char)0;
- *(ptr+index)=t & color_code;
- }
- }
-
-
- /* óαáΘÑ¡¿Ñ Γ«τ¬¿ ó«¬απú µÑ¡Γαá ß ¬««αñ¿¡áΓἿ
- ó x_org ¿ y_org, ¡á πú«½ theta */
-
- void rotate_point(theta,x,y,x_org,y_org)
- double theta,*x,*y;
- int x_org,y_org;
- {
- double tx,ty;
-
- /* ¡«α¼á½¿ºáµ¿∩ X ¿ Y ¬ ¡áτá½∞¡«¼π áñαÑßπ */
- tx=*x-x_org;
- ty=*y-y_org;
-
- /* óαáΘÑ¡¿Ñ */
- *x=tx*cos(theta)-ty*sin(theta);
- *y=tx*sin(theta)-ty*cos(theta);
-
- /* ó«ºóαáΘÑ¡¿Ñ º¡áτÑ¡¿⌐ ¬««αñ¿¡áΓ */
- *x+=x_org;
- *y+=y_org;
- }
-
-
- /* éαáΘÑ¡¿Ñ ºáñá¡¡δσ «íΩÑ¬Γ«ó */
-
- void rotate_object(ob, theta, x, y, sides)
- double ob[][4]; /* «»¿ßá¡¿Ñ «íΩѬΓá */
- double theta; /* πú«½ »«ó«α«Γá ó αáñ¿á¡áσ */
- int x, y;
- int sides;
- {
- register int i, j;
- double tempx, tempy;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 32 --
-
-
- char ch;
-
- for(;;)
- {
- ch = getch(); /* óó«ñ »α¿º¡á¬á ¡á»αáó½Ñ¡¿∩ óαáΘÑ¡¿∩ */
- switch(tolower(ch))
- {
- case 'l': /* óαáΘÑ¡¿Ñ »α«Γ¿ó τáß«ó«⌐ ßΓαѽ¬¿ */
- theta = theta < 0 ? -theta : theta;
- break;
- case 'r': /* óαáΘÑ¡¿Ñ »« τáß«ó«⌐ ßΓαѽ¬Ñ */
- theta = theta > 0 ? -theta : theta;
- break;
- default: return;
- }
- for(j=0; j<=sides; j++) /* ßΓ¿αá¡¿Ñ ßΓáαδσ ½¿¡¿⌐ */
- {
- line((int) ob[j][0], (int) ob[j][1],
- (int) ob[j][2], (int) ob[j][3], 0);
- rotate_point(theta, &ob[j][0],
- &ob[j][1], x, y);
- rotate_point(theta, &ob[j][2], &ob[j][3], x, y);
- line((int) ob[j][0], (int) ob[j][1],
- (int) ob[j][2], (int) ob[j][3], 2);
- }
- }
- }
-
-
- /* «Γ«íαáªÑ¡¿Ñ «íΩѬΓá ¡á φ¬αá¡Ñ */
-
- void display_object(ob, sides)
- double ob[][4];
- int sides;
- {
- register int i;
-
- for(i=0; i<sides; i++)
- line((int) ob[i][0], (int) ob[i][1],
- (int) ob[i][2], (int) ob[i][3], 2);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 33 --
-
-
- æí«α¬á »«ñ»α«úαá¼¼
- -----------------------------------------------------------------
-
- é φΓ«¼, »«ß½Ññ¡Ñ¼, »áαáúαáΣÑ, «»¿ßδóáÑΓß∩ »α«ßΓá∩ »α«úαá¼¼á
- α¿ß«óá¡¿∩, ¿ß»«½∞ºπεΘá∩ »«ñ»α«úαá¼¼δ úαáΣ¿¬¿. Åα«úαá¼¼δ α¿ß«óá¡¿∩
- τáßΓ« ¿ß»«½∞ºπεΓ "¼δΦ∞", »«ºó«½∩εΘπε »«½∞º«óáΓѽε πñ«í¡δ¼
- ß»«ß«í«¼ «Γ«íαáªáΓ∞ ½¿¡¿¿ ¡á φ¬αá¡Ñ ΓÑନ¡á½á. Äñ¡á¬«, "¼δΦ∞ε"
- ¬«¼»½Ñ¬ΓπεΓß∩ »«¬á ¡Ñ óßÑ ¬«¼»∞εΓÑαδ »«φΓ«¼π, «»¿ßá¡¡á∩ ºñÑß∞
- "»α«úαá¼¼á-σπñ«ª¡¿¬" «α¿Ñ¡Γ¿α«óá¡á ¡á «»Ñαᵿ¿ ß ¬½áó¿ΦἿ
- »ÑαѼÑΘÑ¡¿∩ ¬παß«αá.
-
- é "α¿ßπεΘ¿σ" »α«úαá¼¼áσ óá¼ ¡Ñ«íσ«ñ¿¼« ¬«¡Γα«½¿α«óáΓ∞
- ΓѬπΘÑÑ »«½«ªÑ¡¿Ñ ¬««αñ¿¡áΓ X ¿ Y (ó úαáΣ¿τÑ߬«¼ αѪ¿¼Ñ ΓѬπΘ¿Ñ
- ¬««αñ¿¡áΓδ ¿¡ñ¿µ¿απεΓß∩ ¬παß«α«¼ ¡Ñ ß«óßѼ «íδτ¡«⌐ Σ«α¼δ). ä½∩
- »α«ßΓ«Γδ ñá½∞¡Ñ⌐ΦÑú« ¿º½«ªÑ¡¿∩ ¼áΓÑα¿á½á íπñѼ ¡áºδóáΓ∞
- "úαáΣ¿τÑ߬¿⌐" ¬παß«α "»ÑαѬαÑßΓ∞Ѽ", »α¿¡¿¼á∩ ó« ó¡¿¼á¡¿Ñ ¿ Γ«Γ
- Σá¬Γ, τΓ« ó úαáΣ¿τÑ߬«¼ αѪ¿¼Ñ Ñú« Σ«α¼á ñÑ⌐ßΓó¿Γѽ∞¡« ¡á»«¼¿¡áÑΓ
- ¬αÑßΓ. öπ¡¬µ¿∩ xhairs() αẼÑΘáÑΓ úαáΣ¿τÑ߬¿⌐ ¬παß«α ó »«º¿µ¿¿,
- ߻ѵ¿Σ¿µ¿α«óá¡¡«⌐ º¡áτÑ¡¿∩¼¿ ÑÑ áαúπ¼Ñ¡Γ«ó X ¿ Y.
-
- ìừ¼¿¡áѼ, τΓ« ñó«¿τ¡δ⌐ ¬«ñ µóÑΓá ߬½áñδóáÑΓß∩ »« ßσѼÑ
- "êïê" ß« 128 ß µÑ½∞ε πßΓá¡«ó¬¿ 7 í¿Γá ó 1. ¥Γ« »«ºó«½∩ÑΓ Σπ¡¬µ¿¿
- mempoint() ߬½áñδóáΓ∞ »« ßσÑ¼Ñ "¿ß¬½ετáεΘÑú« êïê" ñó«¿τ¡δÑ ¬«ñδ
- ßΓáα«ú« ¿ ¡«ó«ú« µóÑΓá ¡á φ¬αá¡Ñ ó¼ÑßΓ« Ñú« ¿º¼Ñ¡Ñ¡¿∩. Æá¬á∩
- 󫺼«ª¡«ßΓ∞ »«ºó«½∩ÑΓ ñ«ßΓ¿τ∞ ñóπσ ó᪡δσ ¼«¼Ñ¡Γ«ó. é«-»Ñαóδσ,
- úαáΣ¿τÑ߬¿⌐ ¬παß«α óßÑúñá ó¿ñ¿¼, Γ.¬. óßÑúñá ¿¼ÑÑΓ µóÑΓ, «Γ½¿τ¡δ⌐
- «Γ «¬απªáεΘÑú«. é«-óΓ«αδσ, º¡áτ¿Γѽ∞¡« π»α«ΘáÑΓß∩ »α«µÑßß
- ó«ºóαáΓá Γ«τ¬¿ αáßΓαá, ºá¡¿¼áѼ«⌐ ¬παß«α«¼, ó ¿ßσ«ñ¡«Ñ »«½«ªÑ¡¿Ñ.
- ¥Γá «»Ñαᵿ∩ óδ»«½¡∩ÑΓß∩ »πΓѼ »«óΓ«α¡«ú« «íαáΘÑ¡¿∩ ¬ φΓ¿¼ Γ«τ¬á¼
- (¡á»«¼¡¿¼, τΓ« »«ß½Ññ«óáΓѽ∞¡«Ñ óδ»«½¡Ñ¡¿Ñ ñóπσ «»Ñαᵿ⌐ »« ßσѼÑ
- "¿ß¬½ετáεΘÑú« êïê" óßÑúñá »α¿ó«ñ¿Γ ¬ »Ñαó«¡áτá½∞¡«¼π º¡áτÑ¡¿ε).
- ì¿ªÑ »α¿óÑñÑ¡ ΓѬßΓ Σπ¡¬µ¿¿ «Γ«íαáªÑ¡¿∩ úαáΣ¿τÑ߬«ú« ¬παß«αá.
-
- /* «Γ«íαáªÑ¡¿Ñ úαáΣ¿τÑ߬«ú« ¬παß«αá */
- void xhairs(x,y)
- int x,y;
- {
- line(x-4,y,x+3,y,1|128);
- line(x,y+4,x,y-3,1|128);
-
- }
-
-
- Åα«úαá¼¼á α¿ß«óá¡¿∩, «»¿ßá¡¡á∩ ó ñá¡¡«¼ αáºñѽÑ, »«ºó«½¿Γ
- óá¼:
-
- - α¿ß«óáΓ∞ ½¿¡¿¿;
- - α¿ß«óáΓ∞ »α∩¼«πú«½∞¡¿¬¿;
- - ºá¬αáΦ¿óáΓ∞ »α∩¼«πú«½∞¡¿¬¿;
- - α¿ß«óáΓ∞ «¬απª¡«ßΓ¿;
- - ºá¬αáΦ¿óáΓ∞ «¬απª¡«ßΓ¿;
- - óδí¿αáΓ∞ µóÑΓ;
- - óδí¿αáΓ∞ »á½¿Γαπ;
- - πßΓá¡áó½¿óáΓ∞ ߬«α«ßΓ∞ ¿º¼Ñ¡Ñ¡¿∩ »áαá¼ÑΓα«ó;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 34 --
-
-
- - ß«σαá¡∩Γ∞ úαáΣ¿τÑ߬¿Ñ ¿º«íαáªÑ¡¿∩;
- - ºáúαπªáΓ∞ úαáΣ¿τÑ߬¿Ñ ¿º«íαáªÑ¡¿∩;
- - óαáΘáΓ∞ «íΩѬΓδ ó«¬απú ½εí«⌐ Γ«τ¬¿;
- - ¬«»¿α«óáΓ∞ ¿ »ÑαÑßδ½áΓ∞ úαáΣ¿τÑ߬¿Ñ ¿º«íαáªÑ¡¿∩.
-
-
- Åα¿óÑñѼ ¡¿ªÑ ΓѬßΓ ú½áó¡«⌐ »α«úαá¼¼δ :
-
- main()
- {
- union k{
- char c[2];
- int i;
- } key ;
-
- int x=10, y=10; /* ΓѬπΘá∩ »«º¿µ¿∩ φ¬αá¡á */
- int cc=2; /* ΓѬπΘ¿⌐ µóÑΓ */
- int on_flag=1; /* »α¿º¡á¬ ¿ß»«½∞º«óá¡¿∩ ¬áαá¡ñáΦá */
- int pal_num=1; /* ¡«¼Ñα »á½¿Γαδ */
- /* ¬«¡Ñτ¡á∩ Γ«τ¬á «»αÑñѽѡ¿∩ ½¿¡¿⌐,
- »α∩¼«πú«½∞¡¿¬«ó, «¬απª¡«ßΓÑ⌐ */
- int startx=0, starty=0, endx=0, endy=0;
- int first_point=1;
- int inc=1; /* Φáú »ÑαÑß佬¿ */
- int sides=0; /* ¬«½¿τÑßΓó« ßΓ«α«¡ óδíαá¡¡«ú« «íΩѬΓá */
- int i;
-
- mode(4); /* »ÑαѬ½ετáΓѽ∞ αѪ¿¼á CGA/EGA */
- palette(0); /* »á½¿Γαá 0 */
-
- xhairs(x, y); /* π¬áºáΓѽ∞ ¬παß«αá */
- do
- {
- key.i = bioskey(0);
- xhairs(x, y); /* úαáΣ¿τÑ߬¿⌐ ¬παß«α */
- if(!key.c[0]) switch(key.c[1])
- {
- case 75: /* ó½Ñó« */
- if(on_flag) line(x, y, x, y-inc, cc);
- y -= inc;
- break;
- case 77: /* ó»αáó« */
- if(on_flag) line(x, y, x, y+inc, cc);
- y += inc;
- break;
- case 72: /* óóÑασ */
- if(on_flag) line(x, y, x-inc, y, cc);
- x -= inc;
- break;
- case 80: /* 󡿺 */
- if(on_flag) line(x, y, x+inc, y, cc);
- x += inc;
- break;
- case 71: /* óóÑασ ¿ ó½Ñó« */
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 35 --
-
-
- if(on_flag) line(x, y, x-inc, y-inc, cc);
- x -= inc;
- y -= inc;
- break;
- case 73: /* óóÑασ ¿ ó»αáó« */
- if(on_flag) line(x, y, x-inc, y+inc, cc);
- x -= inc;
- y += inc;
- break;
- case 79: /* 󡿺 ¿ ó½Ñó« */
- if(on_flag) line(x, y, x+inc, y-inc, cc);
- x += inc;
- y -= inc;
- break;
- case 81: /* 󡿺 ¿ ó»αáó« */
- if(on_flag) line(x, y, x+inc, y+inc, cc);
- x += inc;
- y += inc;
- break;
- case 59: /* F1 - ¼Ññ½Ñ¡¡« */ inc=1;
- break;
- case 60: /* F2 - íδßΓα« */
- inc=5;
- break;
- }
- else switch(tolower(key.c[0]))
- {
- case 'o': /* »ÑαѬ½ετÑ¡¿Ñ Φáí½«¡á */
- on_flag = !on_flag;
- break;
- case '1': cc=1; /* µóÑΓ 1 */
- break;
- case '2': cc=2; /* µóÑΓ 2 */
- break;
- case '3': cc=3; /* µóÑΓ 3 */
- break;
- case '0': cc=0; /* µóÑΓ 0 */
- break;
- case 'b': box(startx, starty, endx, endy, cc);
- break;
- case 'f':
- fill_box(startx, starty, endx, endy, cc); break;
- case 'l':
- line(startx, starty, endx, endy, cc); break;
- case 'c':
- circle(startx, starty, endy-starty, cc); break;
- case 'h':
- fill_circle(startx, starty, endy-starty, cc); break;
- case 's':
- save_pic(); break;
- case 'r':
- load_pic(); break;
- case 'm': /* »ÑαÑß佬á Σαáú¼Ñ¡Γá */
- move(startx, starty, endx, endy, x, y); break;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 36 --
-
-
- case 'x': /* ¬«»¿α«óá¡¿Ñ Σαáú¼Ñ¡Γá */
- copy(startx, starty, endx, endy, x, y); break;
- case 'd': /* «»αÑñѽ¿Γ∞ »«ó«α«Γ(cñó¿ú) «íΩѬΓá */
-
- /* é¡¿¼á¡¿Ñ!! é« óαѼ∩ Γαá¡ß½∩µ¿¿ »α«úαá¼¼δ ¿ñÑ¡Γ¿Σ¿¬áΓ«α object
- íδ½ »«¼ÑτÑ¡ ¬á¬ "¡Ñ«»αÑñѽѡ¡δ⌐". àú« «»¿ßá¡¿Ñ ñÑ⌐ßΓó¿Γѽ∞¡«
- «ΓßπΓßΓóπÑΓ ó φΓ«⌐ »α«úαá¼¼Ñ. (ÉÑñ. »Ñα. ê.üδτ¬«ó߬¿⌐)
- */
-
- sides = define_objekt(object, x, y); break;
- case 'a': /* »«ó«α«Γ(ßñó¿ú) «íΩѬΓá */
- rotate_objekt(object, 0.05, x, y, sides); break;
- case '\r': /* ¡áí«α ¬«¡Ñτ¡δσ Γ«τѬ ñ½∩ ½¿¡¿⌐, ¬απú«ó
- ¿½¿ »α∩¼«πú«½∞¡¿¬«ó */
- if(first_point)
- { startx = x, starty = y; }
- else
- { endx = x, endy = y; }
- first_point = !first_point;break;
- case 'p':
- pal_num = pal_num==1 ? 2:1;
- palette(pal_num);
- }
- xhairs(x, y);
- }
- while (key.c[0]!='q');
- getchar();
- mode(2);
- }
-
-
- Ä»¿ΦѼ ¬αáΓ¬« á½ú«α¿Γ¼ αáí«Γδ »α«úαá¼¼δ α¿ß«óá¡¿∩. é¡áτá½Ñ
- φ¬αá¡ ΓÑନ¡á½á πßΓá¡áó½¿óáÑΓß∩ ó 4 úαáΣ¿τÑ߬¿⌐ αѪ¿¼. çáΓѼ
- πßΓá¡áó½¿óáÑΓß∩ »á½¿Γαá 0, ¿ úαáΣ¿τÑ߬¿⌐ ¬παß«α »ÑαѼÑΘáÑΓß∩ ó
- óÑασ¡¿⌐ ½Ñóδ⌐ πú«½. ÿáí½«¡ µóÑΓá »« π¼«½τá¡¿ε πßΓá¡áó½¿óáÑΓß∩ ó
- ß««ΓóÑΓßΓó¿¿ ß ¬«ñ«¼ 2 (¬αáß¡δ⌐ ó »á½¿ΓαÑ 0). Åα¿ »ÑαѼÑΘÑ¡¿¿
- úαáΣ¿τÑ߬«ú« ¬παß«αá ¡á φ¬αá¡Ñ «ßΓáÑΓß∩ ß½Ññ, ¬«Γ«αδ⌐
- «¬αáΦ¿óáÑΓß∩ ó ß««ΓóÑΓßΓó¿¿ ß ΓѬπΘ¿¼ µóÑΓ«¼ Φáí½«¡á. àß½¿
- ¡áª¿¼áΓ∞ ¬½áó¿Φ¿ »ÑαѼÑΘÑ¡¿∩ ¬παß«αá, úαáΣ¿τÑ߬¿⌐ ¬παß«α
- »ÑαѼÑΘáÑΓß∩ ¡á «ñ¡π Γ«τ¬π αáßΓαá ó ºáñá¡¡«¼ ¡á»αáó½Ñ¡¿¿. Æá¬á∩
- ߬«α«ßΓ∞ »ÑαѼÑΘÑ¡¿∩ ¼«ªÑΓ ¡Ñ πñ«ó½ÑΓó«α∩Γ∞ »«½∞º«óáΓѽ∩, »«φΓ«¼π
- ó »α«úαá¼¼Ñ »αÑñπß¼«ΓαÑ¡á 󫺼«ª¡«ßΓ∞ ß¼ÑΘÑ¡¿∩ ¡á 5 Γ«τѬ αáßΓαá
- »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿ F2. ÄΓ¼Ñ¡¿Γ∞ αѪ¿¼ π߬«αÑ¡¡«ú« »ÑαѼÑΘÑ¡¿∩
- ¼«ª¡« »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿ F1. 꺼ѡѡ¿Ñ µóÑΓá «ßπΘÑßΓó½∩ÑΓß∩
- »α¿ ¡áªáΓ¿¿ µ¿Σα«óδσ ¬½áó¿Φ «Γ 0 ñ« 3. é »á½¿ΓαÑ 0 µ¿Σαá 0
- ºáαѺÑαó¿α«óá¡á, 1 «»αÑñѽ∩ÑΓ ºÑ½Ñ¡δ⌐ µóÑΓ, 2 - ¬αáß¡δ⌐, 3 -
- ªÑ½Γδ⌐. ÿáí½«¡ µóÑΓá ¼«ªÑΓ íδΓ∞ ¿º¼Ñ¡Ñ¡ »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿ 0.
- è½áó¿Φ¿ <èπαß«α ó ½Ñóδ⌐ óÑασ¡¿⌐ πú«½> (<HOME>), <æΓαá¡¿µá óóÑασ>
- (<PGUP>), <æΓαá¡¿µá 󡿺> (<PGDN>) ¿ <è«¡> (<END>) »ÑαѼÑΘáεΓ
- úαáΣ¿τÑ߬¿⌐ ¬παß«α ó π¬áºá¡¡«¼ ¡á»αáó½Ñ¡¿¿ ¿ »«ñ πú½«¼ ó 45
- úαáñπß«ó.
-
- ä½∩ á¡á½¿ºá ¬«ñ«ó «»Ñαᵿ⌐ τΓÑ¡¿∩ ó »α«úαá¼¼áσ ¿ß»«½∞ºπÑΓß∩
- Σπ¡¬µ¿∩ bioskey(). Å«α∩ñ«¬ »«ñ¬½ετÑ¡¿∩ φΓ«⌐ Σπ¡¬µ¿¿ ¬ »α«úαá¼¼Ñ
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 37 --
-
-
- »α¿ ¬«¼»¿½∩µ¿¿ «»¿ßá¡ ó ú½áóÑ 1. é »α«úαá¼¼π ó¬½ετÑ¡δ «íαáΘÑ¡¿∩ ¬
- Σπ¡¬µ¿∩¼, »«ºó«½∩εΘ¿¼ óá¼ α¿ß«óáΓ∞ ¿ ºá¬αáΦ¿óáΓ∞ »α∩¼«πú«½∞¡¿¬¿ ¿
- «¬απª¡«ßΓ¿, α¿ß«óáΓ∞ ½¿¡¿¿, ¬«»¿α«óáΓ∞ ¿ »ÑαѼÑΘáΓ∞ ¿º«íαáªÑ¡¿Ñ
- ¡á φ¬αá¡Ñ, ß«σαá¡∩Γ∞ ¡á ñ¿ß¬Ñ ¿ ºáúαπªáΓ∞ ß ¡Ñú« ß«ñÑন¼«Ñ
- φ¬αá¡á, «Γ«íαáªáΓ∞ ¿ óαáΘáΓ∞ «íΩѬΓδ.
-
- Åα¿ ¿º«íαáªÑ¡¿¿ ½¿¡¿⌐, »α∩¼«πú«½∞¡¿¬«ó ¿ «¬απª¡«ßΓÑ⌐ óá¼
- ¡Ñ«íσ«ñ¿¼« «»αÑñѽ¿Γ∞ ¬««αñ¿¡áΓδ ñóπσ Γ«τѬ. ä½∩ »α∩¼«πú«½∞¡¿¬«ó
- - φΓ« ¬««αñ¿¡áΓδ ñóπσ »α«Γ¿ó«»«½«ª¡δσ πú½«ó. ä½∩ ½¿¡¿⌐ ºáñáÑΓß∩
- ¡áτá½∞¡á∩ ¿ ¬«¡Ñτ¡á∩ Γ«τ¬¿, á ñ½∩ «¬απª¡«ßΓ¿ - ¬««αñ¿¡áΓδ µÑ¡Γαá
- ¿ Γ«τ¬¿, τÑαѺ ¬«Γ«απε «¡á íπñÑΓ »α«σ«ñ¿Γ∞.
-
- Åα«µÑßß óδí«αá φΓ¿σ Γ«τѬ óδ»«½¡∩ÑΓß∩ »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿
- <ééÄä> ó ¼«¼Ñ¡Γ, ¬«úñá úαáΣ¿τÑ߬¿⌐ ¬παß«α ¡áσ«ñ¿Γß∩ ó ΓαÑíπѼ«⌐
- «í½áßΓ¿. ìá»α¿¼Ñα, ñ½∩ ¿º«íαáªÑ¡¿∩ ½¿¡¿¿ óδ »ÑαѼÑΘáÑΓÑ
- úαáΣ¿τÑ߬¿⌐ ¬παß«α ó Γ«τ¬π, úñÑ «¡á ñ«½ª¡á ¡áτ¿¡áΓ∞ß∩ ¿ ¡áª¿¼áÑΓÑ
- ¬½áó¿Φπ <ééÄä> . çáΓѼ óδ πßΓá¡áó½¿óáÑΓÑ ¬παß«α ó Γ«τ¬π, úñÑ
- ½¿¡¿∩ ºá¬á¡τ¿óáÑΓß∩, ¿ ¡áª¿¼áÑΓÑ <ééÄä> ß¡«óá. Åα¿ ¡áªáΓ¿¿
- ¬½áó¿Φ¿ <ééÄä> óδ»«½¡∩ÑΓß∩ ºáúαπº¬á »ÑαѼѡ¡δσ startx, starty,
- endx ¿ endy, ¬«Γ«αδÑ »«Γ«¼ ¿ß»«½∞ºπεΓß∩ ó ¬áτÑßΓóÑ »áαá¼ÑΓα«ó
- óδºδóáѼδσ Σπ¡¬µ¿⌐. Å«ß½Ñ Γ«ú«, ¬á¬ ¬««αñ¿¡áΓδ Γ«τѬ íπñπΓ
- «»αÑñѽѡδ, »α¿ ¡áªáΓ¿¿ ¬½áó¿Φ¿ <é> α¿ßπÑΓß∩ ¬óáñαáΓ, á <F> -
- ¬óáñαáΓ ºá¬αáΦ¿óáÑΓß∩, »α¿ ¡áªáΓ¿¿ <L> α¿ßπÑΓß∩ ½¿¡¿∩, »α¿
- ¡áªáΓ¿¿ <æ> α¿ßπÑΓß∩ «¬απª¡«ßΓ∞, á <ì> - «¬απª¡«ßΓ∞
- ºá¬αáΦ¿óáÑΓß∩.
-
- ä½∩ ¬«»¿α«óá¡¿∩ ¿½¿ »ÑαѼÑΘÑ¡¿∩ τáßΓ¿ φ¬αá¡á óδ ñ«½ª¡δ
- «»αÑñѽ¿Γ∞ óÑασ¡¿⌐ ½Ñóδ⌐ ¿ ¡¿ª¡¿⌐ »αáóδ⌐ πú½δ «í½áßΓ¿, ¬«Γ«απε óδ
- σ«Γ¿ΓÑ »ÑαѼÑßΓ¿Γ∞ (¡áªáΓ¿Ñ¼ ¬½áó¿Φ¿ <ééÄä> ). çáΓѼ óδ
- »ÑαѼÑΘáÑΓÑ ¬παß«α ó óÑασ¡¿⌐ ½Ñóδ⌐ πú«½ «í½áßΓ¿, ¬πñá óδ σ«Γ¿ΓÑ
- »ÑαѼÑßΓ¿Γ∞ ¿º«íαáªÑ¡¿Ñ. ä½∩ »ÑαÑß佬¿ ¿º«íαáªÑ¡¿∩ ΓαÑíπÑΓß∩
- ¡áªáΓ∞ ¬½áó¿Φπ <î>, á ñ½∩ ¬«»¿α«óá¡¿∩ - <ò>. çừ¼¡¿ΓÑ, τΓ«
- ßΓáα«Ñ ¿º«íαáªÑ¡¿Ñ ó «í½áßΓ¿, ¬πñá «ßπΘÑßΓó½∩ÑΓß∩ ¬«»¿α«óá¡¿Ñ,
- íπñÑΓ π¡¿τΓ«ªÑ¡«.
-
- ä½∩ óαáΘÑ¡¿∩ «íΩѬΓá óá¼ ¡Ñ«íσ«ñ¿¼« «»αÑñѽ¿Γ∞ ßá¼ «íΩѬΓ,
- »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿ <D>. çáΓѼ, ¿ß»«½∞ºπ∩ ¬½áó¿Φπ <ééÄä>, óδ
- ñ«½ª¡δ «»αÑñѽ¿Γ∞ ¡áτá½∞¡δÑ ¿ ¬«¡Ñτ¡δÑ ¬««αñ¿¡áΓδ Γ«τѬ ñ½∩
- «ΓαѺ¬«ó »« »Ñα¿¼ÑΓαπ óδíαá¡¡«ú« «íΩѬΓá. Åα«µÑßß óδí«αá «íΩѬΓá
- óαáΘÑ¡¿∩ ¿ «»αÑñѽѡ¿∩ Ñú« úαá¡¿µ αÑ὿ºπÑΓß∩ Σπ¡¬µ¿Ñ⌐
- define_object(). éαáΘÑ¡¿Ñ «íΩѬΓá ¡áτ¿¡áÑΓß∩ »«ß½Ñ ¡áªáΓ¿∩
- ¬½áó¿Φ¿ <Ç>. ä½∩ «»αÑñѽѡ¿∩ ¡á»αáó½Ñ¡¿∩ óαáΘÑ¡¿∩ ¿ß»«½∞ºπεΓß∩
- ¬½áó¿Φ¿ <L> (»« τáß«ó«⌐ ßΓαѽ¬Ñ) ¿½¿ <R> (»α«Γ¿ó τáß«ó«⌐
- ßΓαѽ¬¿). ÄßΓá¡«ó¿Γ∞ »α«µÑßß óαáΘÑ¡¿∩ ¼«ª¡« ¡áªáΓ¿Ñ¼ ½εí«⌐
- ¬½áó¿Φ¿, ¬α«¼Ñ <L> ¿½¿ <Ç>.
-
- ä½∩ «ßΓá¡«ó¬¿ αáí«Γδ »α«úαá¼¼δ ¿ß»«½∞ºπÑΓß∩ ¬½áó¿Φá <Q>. Åα¿
- ªÑ½á¡¿¿ óδ ¼«ªÑΓÑ ó¬½ετ¿Γ∞ ó »α«úαá¼¼π Σπ¡¬µ¿¿ ñ½∩ αáí«Γδ ß
- "¼δΦ∞ε". Åα¿¼Ñα óδσ«ñ¡δσ ñá¡¡δσ »α«úαá¼¼δ »«¬áºá¡ ¡á α¿ßπ¡¬Ñ 4-5.
-
- _________________________________________________________________
-
- É¿ßπ¡«¬ 4-5 ¡á ßΓα. 163 ¡Ñ ¼«ªÑΓ íδΓ∞ ó«ß»α«¿ºóÑñÑ¡ ¿¼ÑεΘ¿¼¿ß∩
- ßαÑñßΓóἿ. (ÉÑñ. »Ñα. ê.üδτ¬«ó߬¿⌐)
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 38 --
-
-
- _________________________________________________________________
-
- É¿ß. 4-5. Åα«ßΓÑ⌐Φ¿Ñ αѺπ½∞ΓáΓδ αáí«Γδ »α«úαá¼¼δ α¿ß«óá¡¿∩.
-
-
- Ç ΓÑ»Ñα∞ »α¿óÑñѼ óßε »α«úαá¼¼π α¿ß«óá¡¿∩ µÑ½¿¬«¼.
-
-
- /* Åα«úαá¼¼á ñ½∩ CGA/EGA, »«ºó«½∩εΘá∩ α¿ß«óáΓ∞ ½¿¡¿¿,
- »α∩¼«πú«½∞¡¿¬¿ ¿ «¬απª¡«ßΓ¿. éδ ¼«ªÑΓÑ ¡áα¿ß«óáΓ∞ ¬á¬«⌐-½¿í«
- «íΩÑ¬Γ ¿ óαáΘáΓ∞ Ñú« »« τáß«ó«⌐ ¿½¿ »α«Γ¿ó τáß«ó«⌐ ßΓαѽ¬¿. éδ
- ΓᬠªÑ ¼«ªÑΓÑ ¬«»¿α«óáΓ∞ úαáΣ¿τÑ߬«Ñ ¿º«íαáªÑ¡¿Ñ ¡á ñ¿ß¬ ¿
- ºáúαπªáΓ∞ Ñú« ß ñ¿ß¬á. */
-
- #define NUM_SIDES 20 /* τ¿ß½« ßΓ«α«¡ «íΩѬΓá;
- »α¿ ¡Ñ«íσ«ñ¿¼«ßΓ¿ πóѽ¿τ¿óáÑΓß∩ */
- #include "dos.h"
- #include "stdio.h"
- #include "math.h"
-
- void mode(), line(), box(), fill_box();
- void mempoint(), palette(), xhairs();
- void circle(), plot_circle(), fill_circle();
- void rotate_point(), rotate_object(), goto_xy();
- void display_object(), copy(), move();
- void save_pic(), load_pic();
- unsigned char read_point();
-
- /* ¥Γ«Γ ¼áßß¿ó ß«ñÑαª¿Γ ñ¿¡á¼¿τÑ߬¿ ¼Ñ¡∩εΘ¿Ñß∩
- ¬««αñ¿¡áΓδ «íΩѬΓá.
- */
- double object[NUM_SIDES][4];
- double asp_ratio; /* ß«ñÑαª¿Γ ¬«φΣΣ¿µ¿Ñ¡Γ ߪáΓ¿∩ ñ½∩
- «¬απª¡«ßΓÑ⌐ */
-
- main()
- {
- union k{
- char c[2];
- int i;
- } key ;
-
- int x=10, y=10; /* ΓѬπΘá∩ »«º¿µ¿∩ φ¬αá¡á */
- int cc=2; /* ΓѬπΘ¿⌐ µóÑΓ */
- int on_flag=1; /* »α¿º¡á¬ ¿ß»«½∞º«óá¡¿∩ ¬áαá¡ñáΦá */
- int pal_num=1; /* ¡«¼Ñα »á½¿Γαδ */
-
- int startx=0, starty=0, endx=0, endy=0;
- int first_point=1;
- int inc=1; /* Φáú »ÑαÑß佬¿ */
- int sides=0; /* ¬«½¿τÑßΓó« ßΓ«αo¡ óδíαá¡¡«ú« «íΩѬΓá */
- int i;
-
- mode(4); /* »ÑαѬ½ετáΓѽ∞ αѪ¿¼á CGA/EGA */
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 39 --
-
-
- palette(0); /* »á½¿Γαá 0 */
-
- xhairs(x, y); /* π¬áºáΓѽ∞ ¬παß«αá */
- do
- {
- key.i = bioskey(0);
- xhairs(x, y);
- if(!key.c[0]) switch(key.c[1])
- {
- case 75: /* ó½Ñó« */
- if(on_flag) line(x, y, x, y-inc, cc);
- y -= inc;
- break;
- case 77: /* ó»αáó« */
- if(on_flag) line(x, y, x, y+inc, cc);
- y += inc;
- break;
- case 72: /* óóÑασ */
- if(on_flag) line(x, y, x-inc, y, cc);
- x -= inc;
- break;
- case 80: /* 󡿺 */
- if(on_flag) line(x, y, x+inc, y, cc);
- x += inc;
- break;
- case 71: /* óóÑασ ¿ ó½Ñó« */
- if(on_flag) line(x, y, x-inc, y-inc, cc);
- x -= inc;
- y -= inc;
- break;
- case 73: /* óóÑασ ¿ ó»αáó« */
- if(on_flag) line(x, y, x-inc, y+inc, cc);
- x -= inc;
- y += inc;
- break;
- case 79: /* 󡿺 ¿ ó½Ñó« */
- if(on_flag) line(x, y, x+inc, y-inc, cc);
- x += inc;
- y -= inc;
- break;
- case 81: /* 󡿺 ¿ ó»αáó« */
- if(on_flag) line(x, y, x+inc, y+inc, cc);
- x += inc;
- y += inc;
- break;
- case 59: /* F1 - ¼Ññ½Ñ¡¡« */
- inc=1;
- break;
- case 60: /* F2 - íδßΓα« */
- inc=5;
- break;
- }
- else switch(tolower(key.c[0]))
- {
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 40 --
-
-
- case 'o': /* »ÑαѬ½ετÑ¡¿Ñ Φáí½«¡á */
- on_flag = !on_flag;
- break;
- case '1': cc=1; /* µóÑΓ 1 */
- break;
- case '2': cc=2; /* µóÑΓ 2 */
- break;
- case '3': cc=3; /* µóÑΓ 3 */
- break;
- case '0': cc=0; /* µóÑΓ 0 */
- break;
- case 'b':
- box(startx, starty, endx, endy, cc); break;
- case 'f':
- fill_box(startx, starty, endx, endy, cc); break;
- case 'l':
- line(startx, starty, endx, endy, cc); break;
- case 'c':
- circle(startx, starty, endy-starty, cc); break;
- case 'h':
- fill_circle(startx, starty, endy-starty, cc); break;
- case 's':
- save_pic(); break;
- case 'r':
- load_pic(); break;
- case 'm': /* »ÑαÑß佬á Σαáú¼Ñ¡Γá */
- move(startx, starty, endx, endy, x, y); break;
- case 'x': /* ¬«»¿α«óá¡¿Ñ Σαáú¼Ñ¡Γá */
- copy(startx, starty, endx, endy, x, y); break;
- case 'd': /* «»αÑñѽ¿Γ∞ «íΩÑ¬Γ óαáΘÑ¡¿∩ */
- sides = define_objekt(object, x, y); break;
- case 'a': /* óαáΘÑ¡¿Ñ «íΩѬΓá */
- rotate_objekt(object, 0.05, x, y, sides); break;
- case '\r': /* ¡áí«α ¬«¡Ñτ¡δσ Γ«τѬ ñ½∩ ½¿¡¿⌐, ¬απú«ó
- ¿½¿ »α∩¼«πú«½∞¡¿¬«ó */
- if(first_point)
- { startx = x, starty = y; }
- else
- { endx = x, endy = y; }
- first_point = !first_point; break;
- case 'p':
- pal_num = pal_num==1 ? 2:1;
- palette(pal_num);
- }
- xhairs(x, y);
- }
- while (key.c[0]!='q');
- getchar();
- mode(2);
- }
-
- /* πßΓá¡«ó¬á »á½¿Γαδ */
- void palette(pnum)
- int pnum;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 41 --
-
-
- {
- union REGS r;
- r.h.bh = 1; /* ¬«ñ 4 αѪ¿¼á úαáΣ¿¬¿ */
- r.h.bl = pnum;
- r.h.ah = 11; /* πßΓá¡«ó¬á »á½¿Γαδ */
- int86(0x10, &r, &r);
- }
-
- /* πßΓá¡«ó¬á ó¿ñÑ«-αѪ¿¼á */
- void mode (mode_code)
- int mode_code;
- {
- union REGS r;
-
- r.h.al = mode_code;
- r.h.ah = 0;
- int86(0x10,&r, &r);
- }
-
- /* ¿º«íαáªÑ¡¿Ñ »α∩¼«πú«½∞¡¿¬á */
- void box(sx, sy, ex, ey, c)
- int sx, sy, ex, ey, c;
- {
- line(sx, sy, ex, sy, c);
- line(sx, sy, sx, ey, c);
- line(sx, ey, ex, ey, c);
- line(ex, sy, ex, ey, c);
- }
-
- /* ¿º«íαáªÑ¡¿Ñ ½¿¡¿¿ ºáñá¡¡«ú« µóÑΓá ß ¿ß»«½∞º«ó᡿Ѽ
- á½ú«α¿Γ¼á üαѺѡσá¼á */
- void line(startx,starty,endx,endy,color)
- int startx,starty,endx,endy,color;
- {
- register int t,distance;
- int xerr=0,yerr=0,delta_x,delta_y;
- int incx,incy;
-
- /* óδτ¿ß½Ñ¡¿Ñ αáßßΓ«∩¡¿∩ ó «í«¿σ ¡á»αáó½Ñ¡¿∩σ */
- delta_x=endx-startx;
- delta_y=endy-starty;
-
- /* «»αÑñѽѡ¿Ñ ¡á»αáó½Ñ¡¿∩ Φáúá,
- Φáú óδτ¿ß½∩ÑΓß∩ ½¿í« »« óÑαΓ¿¬á½∞¡«⌐, ½¿í« ú«α¿º«¡Γá½∞¡«⌐
- ½¿¡¿¿ */
- if (delta_x>0) incx=1;
- else if (delta_x==0) incx=0;
- else incx= -1;
-
- if (delta_y>0) incy=1;
- else if (delta_y==0) incy=0;
- else incy= -1;
-
- /* «»αÑñѽѡ¿Ñ ¬á¬«Ñ αáßßΓ«∩¡¿Ñ í«½∞ΦÑ */
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 42 --
-
-
- delta_x=abs(delta_x);
- delta_y=abs(delta_y);
- if (delta_x>delta_y) distance=delta_x;
- else distance=delta_y;
-
- /* ¿º«íαáªÑ¡¿Ñ ½¿¡¿¿ */
- for (t=0; t<=distance+1; t++) {
- mempoint(startx,starty,color);
- xerr+=delta_x;
- yerr+=delta_y;
- if (xerr>distance) {
- xerr-=distance;
- startx+=incx;
- }
- if (yerr>distance) {
- yerr-=distance;
- starty+=incy;
- }
- }
- }
-
-
- /* ºá¬αáΦ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á ó ºáñá¡¡δ⌐ µóÑΓ */
-
- void fill_box(startx,starty,endx,endy,color_code)
- int startx,starty,endx,endy,color_code;
- {
- register int i,begin,end;
-
- begin=startx<endx ? startx:endx;
- end=startx>endx ? startx:endx;
-
- for (i=begin;i<=end;++i)
- line(i,starty,i,endy,color_code);
- }
-
-
- /* ¿º«íαáªÑ¡¿Ñ «¬απª¡«ßΓ¿ ß ¿ß»«½∞º«ó᡿Ѽ á½ú«α¿Γ¼á
- üαѺѡσá¼á */
-
- void circle(x_center,y_center,radius,color_code)
- int x_center,y_center,radius,color_code;
- {
- register x,y,delta;
- asp_ratio=1.0; /* φΓ« τ¿ß½« ¼Ñ¡∩ÑΓß∩ ó αẽ¿τ¡δσ
- ß½πτá∩σ */
- y=radius;
- delta=3-2*radius;
- for (x=0;x<y; ) {
- plot_circle(x,y,x_center,y_center,color_code);
- if (delta<0)
- delta+=4*x+6;
- else {
- delta+=4*(x-y)+10;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 43 --
-
-
- y--;
- }
- x++;
- }
- x=y;
- if (y) plot_circle(x,y,x_center,y_center,color_code);
- }
-
- /* plot_circle »ÑτáΓáÑΓ Γ«τ¬¿, «»αÑñѽ∩εΘ¿Ñ «¬απª¡«ßΓ∞ */
- void plot_circle(x, y, x_center, y_center, color_code)
- int x_center,y_center,radius,color_code;
- {
- int x, y, startx, starty, endx, endy, x1, y1;
- starty=y*asp_ratio;
- endy=(y+1)*asp_ratio;
- startx=x*asp_ratio;
- endx=(x+1)*asp_ratio;
-
- for (x1=startx;x1<endx;++x1) {
- mempoint(x1+x_center,y+y_center,color_code);
- mempoint(x1+x_center,y_center-y,color_code);
- mempoint(x_center-x1,y+y_center,color_code);
- mempoint(x_center-x1,y_center-y,color_code);
- }
-
- for (y1=starty;y1<endy;++y1) {
- mempoint(y1+x_center,x+y_center,color_code);
- mempoint(y1+x_center,y_center-x,color_code);
- mempoint(x_center-y1,x+y_center,color_code);
- mempoint(x_center-y1,y_center-x,color_code);
- }
- }
- }
-
- /* ºá¬αáΦ¿óá¡¿Ñ «¬απª¡«ßΓ¿ »πΓѼ »«óΓ«α¡«ú« ó맮óá
- circle() ß π¼Ñ¡∞ΦÑ¡¿Ñ¼ αáñ¿πßá */
-
- void fill_circle(x,y,r,c)
- int x,y,r,c;
- {
- while (r) {
- circle(x,y,r,c);
- r--;
- }
- }
- /* ºá»¿ß∞ Γ«τ¬¿ ó CGA/EGA */
-
- void mempoint(x,y,color_code)
- int x,y,color_code;
- {
- union mask {
- char c[2];
- int i;
- } bit_mask;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 44 --
-
-
- int i,index,bit_position;
- unsigned char t;
- char xor; /* "¿ß¬½ετáεΘÑÑ êïê" µóÑΓá ó ß½πτáÑ Ñú«
- ¿º¼Ñ¡Ñ¡¿∩ */
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
- »á¼∩Γ¿ CGA */
- bit_mask.i=0xFF3F; /* 11111111 00111111 ó
- ñó«¿τ¡«¼ ó¿ñÑ */
- if (x<0 || x>199 || y<0 || y>319) return;
- xor=color_code & 128; /* »α«óÑα¬á, πßΓá¡áó½¿óá½ß∩ ½¿
- αѪ¿¼ "¿ß¬½ετáεΘÑú« êïê" */
- color_code=color_code & 127; /* ¼á߬á ßΓáαΦ¿σ í¿Γ«ó */
-
- /* πßΓá¡«ó¬á í¿Γ«ó«⌐ ¼á߬¿ ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
- ó »αáóπε »«º¿µ¿ε */
-
- bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿
- ó íá⌐ΓÑ */
- color_code<<=2*(3-bit_position); /* ßñó¿ú ¬«ñá µóÑΓá
- ó ¡πª¡πε »«º¿µ¿ε */
- bit_mask.i>>=2*bit_position; /* ßñó¿ú í¿Γ«ó«⌐ ¼á߬¿ ó
- ¡πª¡πε »«º¿µ¿ε */
-
- /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
-
- index=x*40+(y%4);
- if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
- óΓ«α«⌐ í½«¬ */
-
- /* ºá»¿ß∞ µóÑΓá */
-
- if (!xor) { /* αѪ¿¼ ¿º¼Ñ¡Ñ¡¿∩ µóÑΓá */
- t=*(ptr+index) & bit_mask.c[0];
- *(ptr+index)=t|color_code;
- }
- else {
- t=*(ptr+index) | (char)0;
- *(ptr+index)=t & color_code;
- }
- }
-
- /* «Γ«íαáªÑ¡¿Ñ úαáΣ¿τÑ߬«ú« ¬παß«αá */
- void xhairs(x,y)
- int x,y;
- {
- line(x-4,y,x+3,y,1|128);
- line(x,y+4,x,y-3,1|128);
-
- }
-
- /* τΓÑ¡¿Ñ íá⌐Γá ¿º «»ÑαáΓ¿ó¡«⌐ »á¼∩Γ¿ CGA/EGA */
- unsigned char read_point(x,y)
- int x,y;
- {
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 45 --
-
-
- union mask {
- char c[2];
- int i;
- } bit_mask;
- int i,index,bit_position;
- unsigned char t;
- char xor; /* "¿ß¬½ετáεΘÑÑ êïê" µóÑΓá ó ß½πτáÑ Ñú«
- ¿º¼Ñ¡Ñ¡¿∩ */
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
- »á¼∩Γ¿ CGA */
- bit_mask.i=3; /* 11111111 00111111 ó
- ñó«¿τ¡«¼ ó¿ñÑ */
- if (x<0 || x>199 || y<0 || y>319) return 0;
-
- /* πßΓá¡«ó¬á í¿Γ«ó«⌐ ¼á߬¿ ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
- ó »αáóπε »«º¿µ¿ε */
- bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿
- ó íá⌐ΓÑ */
- bit_mask.i<<=2*(3-bit_position);
-
- /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
- index=x*40+(y>>4);
- if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
- óΓ«α«⌐ í½«¬ */
-
- /* ºá»¿ß∞ µóÑΓá */
- t=*(ptr+index) & bit_mask.c[0];
- t>>=2*(3-bit_position);
- return t;
- }
-
- /* ß«σαá¡Ñ¡¿Ñ úαáΣ¿τÑ߬«ú« ¿º«íαáªÑ¡¿∩ */
-
- void save_pic()
- {
- char fname[80];
- FILE *fp;
- register int i,j;
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
- »á¼∩Γ¿ CGA */
- char far *temp;
- unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
-
- temp=ptr;
- /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;++j) {
- buf[i][j]=*temp; /* τÑΓ¡δ⌐ íá⌐Γ */
- buf[i][j+1]=*(temp+8152); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
- *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
- temp++;
- }
- goto_xy(0,0);
- printf("ê¼∩ Σá⌐½á:");
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 46 --
-
-
- gets(fname);
- if (!(fp=fopen(fname,"wb"))) {
- printf("öá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ\n");
- return;
- }
-
- temp=ptr;
- /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;++j) {
- *temp= buf[i][j]; /* τÑΓ¡δ⌐ íá⌐Γ */
- *(temp+8125)=buf[i][j+1]; /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
- *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
- temp++;
- }
- /* ¬«»¿α«óá¡¿Ñ ¿º«íαáªÑ¡¿∩ ó Σá⌐½ */
- for (i=0;i<8152;i++) {
- putc(*ptr,fp); /* τÑΓ¡δ⌐ íá⌐Γ */
- putc(*(ptr+8125),fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
- ptr++;
- }
-
- fclose(fp);
- }
-
-
- /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ */
-
- void load_pic()
- {
- char fname[80];
- FILE *fp;
- register int i,j;
-
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
- »á¼∩Γ¿ CGA */
- char far *temp;
- unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
-
- temp=ptr;
- /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;j+=2) {
- buf[i][j]=*temp;
- buf[i][j+1]=*(temp+8152);
- *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
- temp++;
- }
- goto_xy(0,0);
- printf("ê¼∩ Σá⌐½á:");
- gets(fname);
- if (!(fp=fopen(fname,"rb"))) {
- goto_xy(0,0);
- printf("öá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ\n");
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 47 --
-
-
- temp=ptr;
- /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;j+=2) {
- *temp= buf[i][j];
- *(temp+8125)=buf[i][j+1];
- temp++;
- }
- return;
- }
- /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ ¿º Σá⌐½á */
- for (i=0;i<8152;i++) {
- *ptr=getc(fp); /* τÑΓ¡δ⌐ íá⌐Γ */
- *(ptr+8125)=getc(fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
- ptr++;
- }
-
- fclose(fp);
- }
-
- /* »«¼ÑßΓ¿Γ∞ ¬παß«α ó ºáñá¡¡«Ñ »«½«ªÑ¡¿Ñ */
- void goto_xy(x,y)
- int x,y;
- {
- r.h.ah=2; /* áñαÑßᵿ∩ ¬παß«αá */
- r.h.dl=y; /* ¬««αñ¿¡áΓá ßΓ«½íµá */
- r.h.dh=x; /* ¬««αñ¿¡áΓá ßΓ᫬¿ */
- r.h.bh=0; /* ó¿ñÑ«ßΓαá¡¿µá */
- int86(0x10,&r,&r);
- }
-
-
- /* ¬«»¿α«óá¡¿Ñ τáßΓ¿ φ¬αá¡á ó ñαπúπε «í½áßΓ∞ */
-
- void copy(startx,starty,endx,endy,x,y)
- int startx,starty; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá */
- int endx,endy; /* ¡¿ª¡∩∩ »αáóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿
- ¬«»¿α«óá¡¿∩ */
- int x,y; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿,
- ¬πñá íπñÑΓ »α«ó«ñ¿Γß∩ ¬«»¿α«óá¡¿Ñ */
- {
- int i,j;
- unsigned char c;
-
- for (;startx<endx;startx++,x++)
- for (i=starty,j=y;i<endy;i++,j++) {
- c=read_point(startx,i); /* τΓÑ¡¿Ñ Γ«τ¬¿ */
- mempoint(x,j,c); /* ºá»¿ß∞ ÑÑ ó ¡«óπε «í½áßΓ∞ */
- }
- }
-
-
- /* »ÑαÑß佬á τáßΓ¿ φ¬αá¡á ó ñαπúπε «í½áßΓ∞ */
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 48 --
-
-
- void move(startx,starty,endx,endy,x,y)
- int startx,starty; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá */
- int endx,endy; /* ¡¿ª¡∩∩ »αáóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿
- »ÑαÑß佬¿ */
- int x,y; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿,
- ¬πñá íπñÑΓ »α«ó«ñ¿Γ∞ß∩ »ÑαÑß佬á */
- {
- int i,j;
- unsigned char c;
-
- for (;startx<endx;startx++,x++)
- for (i=starty,j=y;i<endy;i++,j++) {
- c=read_point(startx,i); /* τΓÑ¡¿Ñ Γ«τ¬¿ */
- mempoint(startx,i,0); /* ßΓ¿αá¡¿Ñ ßΓáα«ú«
- ¿º«íαáªÑ¡¿∩ */
- mempoint(x,j,c); /* ºá»¿ß∞ Γ«τ¬¿ ó ¡«óπε «í½áßΓ∞ */
- }
- }
-
-
- /* óαáΘÑ¡¿Ñ Γ«τ¬¿ ó«¬απú µÑ¡Γαá ß ¬««αñ¿¡áΓἿ
- x_org ¿ y_org ¡á πú«½ theta */
-
- void rotate_point(theta,x,y,x_org,y_org)
- double theta,*x,*y;
- int x_org,y_org;
- {
- double tx,ty;
-
- /* ¡«α¼á½¿ºáµ¿∩ X ¿ Y ¬ ¡áτá½∞¡«¼π áñαÑßπ */
- tx=*x-x_org;
- ty=*y-y_org;
-
- /* óαáΘÑ¡¿Ñ */
- *x=tx*cos(theta)-ty*sin(theta);
- *y=tx*sin(theta)-ty*cos(theta);
-
- /* ó«ºóαáΘÑ¡¿Ñ º¡áτÑ¡¿⌐ ¬««αñ¿¡áΓ */
- *x+=x_org;
- *y+=y_org;
- }
-
-
- /* éαáΘÑ¡¿Ñ ºáñá¡¡δσ «íΩÑ¬Γ«ó */
-
- void rotate_object(ob, theta, x, y, sides)
- double ob[][4]; /* «»¿ßá¡¿Ñ «íΩѬΓá */
- double theta; /* πú«½ »«ó«α«Γá ó αáñ¿á¡áσ */
- int x, y;
- int sides;
- {
- register int i, j;
- double tempx, tempy;
- char ch;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 49 --
-
-
-
- for(;;)
- {
- ch = getch(); /* óó«ñ »α¿º¡á¬á ¡á»αáó½Ñ¡¿∩ óαáΘÑ¡¿∩ */
- switch(tolower(ch))
- {
- case 'l': /* óαáΘÑ¡¿Ñ »α«Γ¿ó τáß«ó«⌐ ßΓαѽ¬¿ */
- theta = theta < 0 ? -theta : theta;
- break;
- case 'r': /* óαáΘÑ¡¿Ñ »« τáß«ó«⌐ ßΓαѽ¬Ñ */
- theta = theta > 0 ? -theta : theta;
- break;
- default: return;
- }
- for(j=0; j<=sides; j++) /* ßΓ¿αá¡¿Ñ ßΓáαδσ ½¿¡¿⌐ */
- {
- line((int) ob[j][0], (int) ob[j][1],
- (int) ob[j][2], (int) ob[j][3], 0);
- rotate_point(theta, &ob[j][0], &ob[j][1], x, y);
- rotate_point(theta, &ob[j][2], &ob[j][3], x, y);
- line((int) ob[j][0], (int) ob[j][1],
- (int) ob[j][2], (int) ob[j][3], 2);
- }
- }
- }
-
-
- /* «Γ«íαáªÑ¡¿Ñ «íΩѬΓá ¡á φ¬αá¡Ñ */
- void display_object(ob, sides)
- double ob[][4];
- int sides;
- {
- register int i;
-
- for(i=0; i<sides; i++)
- line((int)ob[i][0], (int)ob[i][1],
- (int)ob[i][2], (int)ob[i][3], 2);
- }
-
- /* «»αÑñѽѡ¿Ñ «íΩѬΓá »« ºáñá¡¡δ¼ Γ«τ¬á¼ */
- define_object(ob,x,y)
- double ob[][4];
- int x,y;
- {
-
- union k{
- char c[2];
- int i;
- } key ;
- register int i,j;
-
- char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
- »á¼∩Γ¿ CGA */
- char far *temp;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 50 --
-
-
- unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
- int sides=0;
-
- temp=ptr;
- /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;j+=2) {
- buf[i][j]=*temp;
- buf[i][j+1]=*(temp+8152);
- *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
- temp++;
- }
-
- i=0;
- xhairs(x,y);
- do {
- goto_xy(0,0);
-
-
-
- printf("Ä»αÑñѽ¿ΓÑ ßΓ«α«¡π %d,",sides+1);
- if (i==0) printf("éóÑñ¿ΓÑ »Ñαóπε úáíáα¿Γ¡πε Γ«τ¬π ");
- else printf("éóÑñ¿ΓÑ óΓ«απε úáíáα¿Γ¡πε Γ«τ¬π ");
-
- key.i=bioskey(0);
- xhairs(x,y);
- if (key.c[0]=13) {
- ob[sides][++i]=(double) x;
- ob[sides][++i]=(double) y;
- if (i==4) {
- i=0;
- sides++;
- }
- }
- /* »ÑαѼÑΘÑ¡¿Ñ úαáΣ¿τÑ߬«ú« ¬παß«αá */
- if (rey.c[0]) switch (key.c[1]) {
- case 75: /* ó½Ñó« */
- y-=1;
- break;
- case 77: /* ó»αáó« */
- y += 1
- break;
- case 72: /* óóÑασ */
- x -= 1;
- break;
- case 80: /* 󡿺 */
- x += 1;
- break;
- case 71: /* óóÑασ ¿ ó½Ñó« */
- x -= 1;
- y -= 1;
- break;
- case 73: /* óóÑασ ¿ ó»αáó« */
- x -= 1;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá IV -- 51 --
-
-
- y += 1;
- break;
- case 79: /* 󡿺 ¿ ó½Ñó« */
- x += 1;
- y -= 1;
- break;
- case 81: /* 󡿺 ¿ ó»αáó« */
- x += 1;
- y += 1;
- break;
- }
- if (key.c[1]!=59) xhairs(x,y);
-
- } while (key.c[1]!=59); /* ¡áªáΓá ¬½áó¿Φá F1 */
-
- /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
- for (i=0;i<14;++i)
- for (j=0;j<80;j+=2) {
- *temp= buf[i][j];
- *(temp+8125)=buf[i][j+1];
- temp++;
- }
- return sides;
- }
-
-
- ò«Γ∩ ó φΓ«⌐ »α«úαá¼¼Ñ ñ«ó«½∞¡« ¼¡«ú« «»ÑαáΓ«α«ó, óá¼ ¡áñ«
- óóÑßΓ¿ ÑÑ ó ßó«⌐ ¬«¼»∞εΓÑα, Γᬠ¬á¬ «¡á ñ«ó«½∞¡« ¿¡ΓÑαÑß¡á. Æá¬ªÑ
- «¡á íπñÑΓ ∩ó½∩Γ∞ß∩ σ«α«Φ¿¼ úαáΣ¿τÑ߬¿¼ ¿¡ßΓαπ¼Ñ¡Γá½∞¡δ¼
- ßαÑñßΓó«¼, ¬«Γ«α«Ñ óδ ß¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞ ó ½εí«⌐ ¼«¼Ñ¡Γ
- óαѼѡ¿.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó