Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
02.05.2014
Размер:
69.07 Кб
Скачать

                              - 81 -
                           ѓ ‹ Ђ ‚ Ђ   4             (Ђ­¤ан ‹  Њ®в)
                        -------------------                                                                                                                                                                                                                                                  
                    Њ…•ЂЌ€‡Њ› „‚“•Њ…ђЌЋ‰ ѓђЂ”€Љ€   

  ‚л ¬®¦ҐвҐ бзЁв вм, зв® нЄа ­ Є®¬ЇмовҐа  Ї®¤®ЎҐ­ «Ёбвг Ўг¬ ЈЁ, Є®в®ал© ¬®¦­®
  Ё§ЈЁЎ вм, бў®а зЁў вм ў вагЎ®зЄг Ё ў®®ЎйҐ Є Є гЈ®¤­® ва ­бд®а¬Ёа®ў вм ў
  агЄ е. —в®Ўл ¤Ґ« вм Ї®¤®Ў­лҐ ўҐйЁ, ¬л ¤®«¦­л §­ вм п§лЄ, б Ї®¬®ймо Є®в®а®Ј®
  ўбҐ нв® ўлЇ®«­пҐвбп - п§лЄ ¬ вҐ¬ вЁЄЁ.
  ‚ ¤ ­­®© Ј« ўҐ ¬л Ї®§­ Є®¬Ё¬бп б ⥬, зв® ­ §лў Ґвбп ¤ўге¬Ґа­ п Їа®ҐЄжЁп Ё
  Ё§гзЁ¬ б«Ґ¤гойЁҐ ⥬л:
    - Љ а⥧Ё ­бЄ п Ё«Ё ¤ўге¬Ґа­ п Їа®ҐЄжЁп;
    - ’®зЄЁ, «Ё­ЁЁ Ё ®Ў« бвЁ;
    - ’а ­б«пжЁп;
    - Њ бив ЎЁа®ў ­ЁҐ;
    - Џ®ў®а®вл;
    - ђ §аҐ§ ­ЁҐ;
    - €бЇ®«м§®ў ­ЁҐ ¬ ваЁж.

          „‚“•Њ…ђЌЂџ ЏђЋ…Љ–€џ

  „ўг嬥а­го Їа®ҐЄжЁо (2-D), Ё­ зҐ ­ §лў Ґ¬го Є а⥧Ё ­бЄ®©, ¬®¦­® ба ў­Ёвм б
  «Ёб⮬ Ўг¬ ЈЁ ў Є«Ґв®зЄг. ђЁб.4.1 Ї®Є §лў Ґв нв®.
                               - 82 -

                                ®бм Y Е
                                      Е
                                      Е
                                      Е
                            (-3,4)    Е
                                .     Е
                                      Е
                                      Е  (1,1)                  ®бм X
                                      Е .                            
           ДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕД
                                      Е                      
                                      Е                      
                                      Е 
                                      Е 
                                      Е 
                                      Е 

           ђЁб.4.1. ’®зЄЁ (1,1) Ё (-3,4) ­  ¤ўг嬥୮© Їа®ҐЄжЁЁ.

  Љ ¦¤ п в®зЄ  ў ¤ўг嬥୮© Їа®ҐЄжЁЁ ®¤­®§­ з­® ®ЇЁблў Ґвбп ¤ўг¬п
  Є®®а¤Ё­ в ¬Ё. ЋЎлз­® нвЁ Є®®а¤Ё­ вл ®Ў®§­ з овбп ЎгЄў ¬Ё x Ё y, Ј¤Ґ x
  ®ЇаҐ¤Ґ«пҐв в®зЄг ­  Ј®аЁ§®­в «м­®© ®бЁ X,   y § ¤ Ґв в®зЄг ­  ўҐавЁЄ «м­®©
  ®бЁ Y. Ќ ЇаЁ¬Ґа, Ґб«Ё ­ ¬ § е®зҐвбп ­ аЁб®ў вм в®зЄЁ (1,1) Ё (-3,4), в® ¬л
  ᤥ« Ґ¬ в Є, Є Є Ї®Є § ­® ­  аЁб.4.1.
  Ќ з ў б Ё§г祭Ёп бў®©бвў ¤ўг嬥୮© Їа®ҐЄжЁЁ, ¬л Ўг¤Ґ¬ Ї®б⥯Ґ­­® ¤ўЁЈ вмбп
  ®в Їа®бв®Ј® Є б«®¦­®¬г, Ё Є ⮬㠢६Ґ­Ё, Є®Ј¤  ¤®©¤Ґ¬ ¤® ваҐе¬Ґа­ле
  ®ЎкҐЄв®ў, ®­Ё ­Ґ Ї®Є ¦гвбп зҐаҐбзга б«®¦­л¬Ё. Ља®¬Ґ в®Ј®, бгйҐбвўгҐв ўҐ¤м
  ­Ґ¬ «® ўҐбм¬  ЇаЁў«ҐЄ вҐ«м­ле ¤ўг嬥а­ле ЁЈа, ® Є®в®але в Є¦Ґ ­Ґ бв®Ёв
  § Ўлў вм. ’Ґ¬ ў ¦­ҐҐ Ї®­пвм ¬Ґе ­Ё§¬л Ї®«г祭Ёп ¤ўг嬥୮© Ја дЁЄЁ Ё
  а бᬮваҐвм  «Ј®аЁв¬л а §«Ёз­ле Ја дЁзҐбЄЁе ЇаҐ®Ўа §®ў ­Ё©.


       ’Ћ—Љ€, ‹€Ќ€€ € ЋЃ‹Ђ‘’€

  ‚ᥠ¬л ўЁ¤Ґ«Ё ЁЈал вЁЇ  Asteroids, Spectre Ё Major Havoc. Њ­®ЈЁҐ Ё§ ­Ёе
  Ё¬Ґов ®ЎйЁҐ зҐавл ЇҐаўле ўЁ¤Ґ®ЁЈа - ўбҐ ®­Ё ўлЇ®«­Ґ­л «Ё­Ёп¬Ё Ё ўбҐ ®­Ё,
  Є Є Їа ўЁ«®, Ї«®бЄЁҐ. Љбв вЁ, ў ЇаҐ¤л¤гйЁе Ј« ў е ¬л ҐйҐ ­ЁзҐЈ® ­Ґ ¤Ґ« «Ё
  ¤«п аЁб®ў ­Ёп Їа®ҐЄжЁЁ Єа®¬Ґ ®в®Ўа ¦Ґ­Ёп в®зЄЁ.

                          - 83 -

      ’®зЄЁ  
    ---------------
  Њл 㦥 ¤ «Ё ®ЇаҐ¤Ґ«Ґ­ЁҐ в®зЄҐ. Ћ­  ЇаҐ¤бв ў«пҐв б®Ў®© Ї®§ЁжЁо ­  Ї«®бЄ®бвЁ,
  Є®в®аго ¬®¦­® ®ЇЁб вм Ї а®© Є®®а¤Ё­ в е Ё г. „ ў ©вҐ ­ ЇЁиҐ¬ ¬ «Ґ­мЄго
  Їа®Ја ¬¬г ­  ‘Ё, аЁбгойго в®зЄЁ ­  нЄа ­Ґ. ‹ЁбвЁ­Ј 4.1 Ї®Є §лў Ґв в Єго
  Їа®Ја ¬¬г.

  ‹ЁбвЁ­Ј 4.1. Џа®Ја ¬¬ , аЁбгой п в®зЄЁ (POINTY.C).
  -------------------------------------------------------------------------

  #include <stdio.h> // include the basics
  #include <graph.h> // include Microsofts Graphics Header

  void main(void)
  {

  int x,y,index,color;

  // put the computer into graphics mode 

  _setvideomode(_VRES16COLOR); //  640x480 in 16 colors

  // let's draw 10000 points randomly on the screen

  for (index = 0; index<10000; index++)
       {
       // get a random position and color and plot a point there

       x = rand()%640;
       y = rand()%480; 
       color = rand()%16;
      _setcolor(color);  // set the color of the pixel to be drawn
      _setpixel(x,y);    // draw the pixel

       } // end for index

  // wait for the user to hit a key

  while(!kbhit()){}

  // place the computer back into text mode

  _setvideomode(_DEFAULTMODE);

  } // end main
  --------------------------------------------------------------------------
   ’ҐЇҐам а §ЎҐаҐ¬бп, зв® ¤Ґ« Ґв нв  Їа®Ја ¬¬ :

   - Љ®¬ЇмовҐа ЇҐаҐў®¤Ёвбп ў ०Ё¬ VGA б Ї®¬®ймо ўл§®ў  дг­ЄжЁЁ ‘Ё
     _setvideomode(_VRES16COLOR0. ќв  дг­ЄжЁп Ё§ Ја дЁзҐбЄ®© ЎЁЎ«Ё®вҐЄЁ
     Microsoft. Џ®б«Ґ нв®Ј® Їа®Ја ¬¬  ўе®¤Ёв ў Ј« ў­л© жЁЄ«. ‚
     бвагЄвгаҐ
                           - 84 -
     FOR Є ¦¤л© а § б«гз ©­л¬ ®Ўа §®¬ ЈҐ­ҐаЁаговбп 3 зЁб« : ®¤­® ¤«п жўҐв  Ё
     2  ¤агЈЁе ¤«п Є®®в¤Ё­ в (е,г) Ї®§ЁжЁЁ в®зЄЁ, Є®в®аго ¬л е®вЁ¬
     ­ аЁб®ў вм;
   - ‡ вҐ¬ ¬л ЁбЇ®«м§гҐ¬ ЎЁЎ«Ё®вҐз­го дг­ЄжЁо _septixel(x,y),  зв®Ўл
     ­ аЁб®ў вм в®зЄг ­  нЄа ­Ґ. Џа®Ја ¬¬  ¤Ґ« Ґв нв® 10000 а §,   Ї®в®¬
     ®бв ­ ў«Ёў Ґвбп;
   - ‡ вҐ¬ Їа®Ја ¬¬  ¦¤Ґв ­ ¦ вЁп «оЎ®© Є« ўЁиЁ, Ї®б«Ґ 祣® Їа®Ёб室Ёв
     ўл室 Ёе DOS.


  …б«Ё ўл § ЇгбвЁвҐ Їа®Ја ¬¬г ­ҐбЄ®«мЄ® а §, ⮠ᬮ¦ҐвҐ § ¬ҐвЁвм , зв® в®зЄЁ
  ўбҐ ўаҐ¬п ®Є §лў овбп ў ®¤­Ёе Ё вҐе ¦Ґ ¬Ґбв е. Љ Є нв® Ї®«гз Ґвбп? „Ґ¤® ў
  ⮬, зв® ¬л Ї®«м§гҐ¬бп дг­ЄжЁҐ© rand(), Є®в®а п ­Ґ пў«пҐвбп ў Ї®«­®¬ б¬лб«Ґ
  ЈҐ­Ґа в®а®¬ б«гз ©­ле зЁбҐ«. Ћ­  ў®§ўа й Ґв в Є ­ §лў Ґ¬лҐ ЇбҐў¤®б«гз ©­лҐ
  зЁб« . —в®Ўл Ё§ЎҐ¦ вм нв®Ј®, ў ¬ ­ ¤® ўбпЄЁ© а § ЇаЁ § ЇгбЄҐ гбв ­ ў«Ёў вм
  ЈҐ­Ґа в®а б«гз ©­ле зЁбҐ« б а §­л¬Ё ­ з «м­л¬Ё §­ зҐ­Ёп¬Ё. ‚бв ўм⥠ў
  ­ з «® Їа®Ја ¬¬л дг­ЄжЁо stand(int) - Ё ўбҐ Ўг¤Ґв ў Ї®ап¤ЄҐ.       

       ‹Ё­ЁЁ                        
     --------------                 

  ‹Ё­Ёп, Є Є ўл §­ ҐвҐ, - нв® Єа вз ©иЁ© ®в१®Є ¬Ґ¦¤г ¤ўг¬п в®зЄ ¬Ё. 
  Ќ ЇаЁ¬Ґа, ¬Ґ¦¤г в®зЄ ¬Ё (1,1) Ё (5,5) ­  Ї«®бЄ®бвЁ «Ё­Ёп Ўг¤Ґв ўлЈ«п¤Ґвм
  в Є (аЁб.4.2):                    
                                     ®бм Y
                                                 (5,5)
                                    ДЕД        .
                                    ДЕД 
                                    ДЕД
                                    ДЕД
                                    ДЕД. (1,1)           ®бм X
                 ЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДДД
                                    ДЕД 
                                    ДЕД
                                    ДЕД
                                    ДЕД
                                    ДЕД

                     ђЁб.4.2. ‹Ё­Ёп ­  Ї«®бЄ®бвЁ

                                  - 85 -
  „ ў ©вҐ Ё§¬Ґ­Ё¬ Їа®Ја ¬¬г Ё§ ‹ЁбвЁ­Ј  4.1 в Є, зв®Ўл ®­  аЁб®ў «  «Ё­ЁЁ
  ў¬Ґбв® в®зҐЄ.—в®Ўл ᤥ« вм нв®, ­г¦­® Є®Ґ-зв® Ё§¬Ґ­Ёвм. ‚¬Ґбв® 2 б«гз ©­ле
  зЁбҐ« е Ё г ⥯Ґам Ёе Ўг¤Ґв 4: (е1,г1) Ё (е2,г2). Џ®в®¬ Їа®Ја ¬¬  ­ аЁбгҐв
  ¬Ґ¦¤г ­Ё¬Ё «Ё­Ёо, ЁбЇ®«м§гп ўл§®ў Ў®Ў«Ё®вҐз­®© дг­ЄжЁЁ. ‹ЁбвЁ­Ј Ўг¤Ґв
  ўлЈ«п¤Ґвм в Є:

  ‹ЁбвЁ­Ј 4.2. Џа®Ја ¬¬ , аЁбгой п «Ё­ЁЁ (LINER.C).
  -------------------------------------------------------------------------

  #include <stdio.h> // include the basics
  #include <graph.h>// include Microsofts Graphics Header

  void main(void)
  {

  int x1,y1,x2,y2,color,index;

  // put the computer into graphics mode 

  _setvideomode(_VRES16COLOR); //  640x480 in 16 colors

  // let's draw 1,000 lines randomly on the screen

  for (index = 0; index<1000; index++)
       {
       // get a random positions and color and draw a line there

       x1 = rand()%640;  //  x of starting point
       y1 = rand()%480;  //  y of starting point
       x2 = rand()%640;  //  x of ending point
       y2 = rand()%480;  //  y of ending point
       color = rand()%16;
      _setcolor(color);  // set the color of the pixel to be drawn
      _moveto(x1,y1);    // move to the start of the line

      _lineto(x2,y2);    //  draw the line

       } // end for index

  // wait for the user to hit a key

  while(!kbhit()){}

  // place the computer back into text mode

  _setvideomode(_DEFAULTMODE);

  } // end main
  -------------------------------------------------------------------------

                          - 86 - 
    Њ­®Ј®гЈ®«м­ЁЄЁ
   --------------------

  ‹Ё­ЁЁ ўҐбм¬  Їа®бвл, Ё Ґб«Ё ўл ЇаЁ«®¦ЁвҐ ­Ґ¬­®Ј® гбЁ«Ё©, ⮠ᬮ¦ҐвҐ Ё§
  Їа®Ја ¬¬л 4.2 ᤥ« вм Їа®бв®© Screen Saver. Ќ® ўЁ¤Ґ®ЁЈал Єа®¬Ґ «Ё­Ё©
  ᮤҐа¦ в ҐйҐ ¬­®¦Ґбвў® Ё­вҐаҐб­ле Ја дЁзҐбЄЁе ®ЎкҐЄв®ў, ­ ЇаЁ¬Ґа,
  ¬­®Ј®гЈ®«м­ЁЄ®ў.                     
  Њ­®Ј®гЈ®«м­ЁЄ - нв® ¬­®¦Ґбвў® в®зҐЄ, ®ЎкҐ¤Ё­Ґ­­ле «Ё­Ёп¬Ё. ’®зЄЁ
  ЇҐаҐбҐзҐ­Ёп «Ё­Ё© ­ §лў овбп ўҐаиЁ­ ¬Ё ¬­®Ј®гЈ®«м­ЁЄ . Ќ  аЁб.4.3 Ї®Є § ­
  ваҐгЈ®«м­ЁЄ, ®Ўа §®ў ­­л© ваҐ¬п ўҐаиЁ­ ¬Ё.                                  
                             ®бм Y
                                   і       . ўҐаиЁ­  1
                                  ДЕД        (4,13)
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД
                                  ДЕ                    ®бм • 
      ДДДДДДДДДЕДЕДЕДЕДЕДЕДЕДЕДЕДВДґДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕД
                                   Е                       
             ўҐаиЁ­  3            ДЕД 
              (-6,-3)  .          ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                  ДЕД 
                                   і                   . ўҐаиЁ­  2
                                   і                     (10,-9)

              ђЁб.4.3. ЏаЁ¬Ґа Їа®бв®Ј® ¬­®Ј®гЈ®«м­ЁЄ .

  ‚ᥠ¬­®Ј®гЈ®«м­ЁЄЁ пў«повбп § Єалвл¬Ё ЈҐ®¬ҐваЁзҐбЄЁ¬Ё ®ЎкҐЄв ¬Ё.
  Њ­®Ј®гЈ®«м­ЁЄЁ Ўлў ов ¤ўге вЁЇ®ў. ЋЎ  вЁЇ  ЇаҐ¤бв ў«Ґ­л ­  аЁб.4.4.

  ‘гйҐбвўгҐв ¬ вҐ¬ вЁзҐбЄЁ©  «Ј®аЁв¬, Ї®§ў®«пойЁ© ®ЇаҐ¤Ґ«Ёвм, Є Є Є®¬г вЁЇг
  ®в­®бЁвбп ¤ ­­л© ¬­®Ј®гЈ®«м­ЁЄ, ­® ®­ ¤®ў®«м­® б«®¦Ґ­ Ё ᥩз б ­ ¬ ­Ґ
  ­г¦Ґ­. „ ў ©вҐ «гзиҐ ­ ЇЁиҐ¬ Їа®Ја ¬¬г, аЁбгойго ¬­®Ј®гЈ®«м­ЁЄЁ (‹ЁбвЁ­Ј
  4.3).

                             - 87 -
                               ®бм Y і                                                 
                                    ДЕД                   
                                    ДЕД     ЪДДДДДДДДДДДДДДДДДї
                ЪДДДДДДДДДДДДДД      ЕД     і                 і
                і                   ДЕД     і                 і
                і                   ДЕД     і                 і
                і                   ДЕД     і                 і  ®бм • 
         ДДДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДДЕДДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕД
                і         щ         ДЕД     і                 і 
                і                   ДЕД     і                 і     ўлЈ­гвл©
  ў®Ј­гвл© ДДД  і                    ЕД     і                 і ДДД(ўлЇгЄ«л©)
                АДДДДДДДДДДДДДДД    ДЕД     і                 і
                                    ДЕД     АДДДДДДДДДДДДДДДДДЩ
                                     і  
                                     і


                ђЁб.4.4. „ў  вЁЇ  ¬­®Ј®гЈ®«м­ЁЄ®ў


  ‹ЁбвЁ­Ј 4.3. Џа®Ја ¬¬ , аЁбгой п ¬­®Ј®гЈ®«м­ЁЄЁ (POLYDRAW.C).
  -------------------------------------------------------------------------

  #include <stdio.h> // include the basics
  #include <graph.h>// include Microsofts Graphics Header

  void main(void)
  {

  // put the computer into graphics mode 
  _setvideomode(_VRES16COLOR); //  640x480 in 16 colors

  // draw a simple polygon
  _setcolor(1);  // blue
  _moveto(100,100); // vertex 1
  _lineto(120,120);   // vertex 2
  _lineto(150,200);   // vertex 3
  _lineto(80,190);    // vertex 4
  _lineto(80,60);      // vertex 5
  _lineto(100,100);   // back to vertex 1 to close up the polygon

  // now highlight each vertex in white

  _setcolor(15);  // white
  _setpixel(100,100); // vertex 1
  _setpixel(120,120); // vertex 2
  _setpixel(150,200); // vertex 3
  _setpixel(80,190);  // vertex 4
  _setpixel(80,60);   // vertex 5

  // wait for the user to hit a key
  while(!kbhit()){}

  // place the computer back into text mode

  _setvideomode(_DEFAULTMODE);

  } // end main
  _________________________________________________________________________

                                    - 88 -

      ЋЃљ…Љ’›

  Џа®¤ўЁ­Ґ¬бп ­Ґ¬­®Ј® ¤ «миҐ Ё ®ЇаҐ¤Ґ«Ё¬ бвагЄвгаг ®ЎкҐЄв . …б«Ё ¬л е®вЁ¬
  ЁбЇ®«м§®ў вм «Ё­ЁЁ ¤«п аЁб®ў ­Ёп Є®а Ў«Ґ© Ё Ї« ­Ґв, в® ­ ¬ ­Ґ®Ўе®¤Ё¬ 
  бвагЄвга  ¤ ­­ле ¤«п еа ­Ґ­Ёп  ваЁЎгв®ў нвЁе ®ЎкҐЄв®ў. „«п ­ з « 
  Ї®бв а Ґ¬бп ҐҐ ­Ґ ®б«®¦­пвм. Џгбвм Є ¦¤л© ­ и ®ЎкҐЄв Ё¬ҐҐв ­Ґ Ў®«ҐҐ 16
  ўҐаиЁ­, 梥⠨ Є®­ЄаҐв­®Ґ ¬Ґбв®Ї®«®¦Ґ­ЁҐ ­  нЄа ­Ґ. Љ Є ўлзЁб«пвм Ї®§ЁжЁо,
  ¬л г§­ Ґ¬ Ї®§¦Ґ,   Є®¤ ¤«п ®ЇЁб ­Ёп ўҐаиЁ­ ў бвагЄвгॠ¤ ­­ле Ўг¤Ґв
  ўлЈ«п¤Ґвм ЇаЁ¬Ґа­® в Є:

  ‹ЁбвЁ­Ј 4.4. ‘вагЄвгал ¤ ­­ле ¤«п § ¤ ­Ёп ўҐаиЁ­ ®ЎкҐЄв®ў.
  -------------------------------------------------------------------------
  typedef struct vertex_typ
             {
             float x,y; // a single point in the 2-D plane.
             } vertex, *vertex_ptr;


  // the structure for an object

  typedef struct object_typ
             {
             int num_vertices;     // number of vertices in this object
             int color;            // color of object
             float xo,yo;          // position of object
             float x_velocity;     // x velocity of object
             float y_velocity;     // y velocity of object
             float scale;          // scale factor
             float angle;          // rotation rate
             vertex vertices[16];  // 16 vertices
             } object, *object_ptr;
  __________________________________________________________________________
                              - 89 -

  ќв  бвагЄвга  ¤ ­­ле ­ ¬ ­г¦­  ¤«п ®ЇЁб ­Ёп ®ЎкҐЄв , ЇаҐ¤бв ў«по饣® б®Ў®©
  ¬­®Ј®гЈ®«м­ЁЄ ®ЇаҐ¤Ґ«Ґ­­®Ј® жўҐв  Ё а бЇ®«®¦Ґ­­®Ј® ў ®ЇаҐ¤Ґ«Ґ­­®© Ї®§ЁжЁЁ
  ­  нЄа ­Ґ.

     Џ®§ЁжЁ®­Ёа®ў ­ЁҐ ®ЎкҐЄв 
    ---------------------------

  ’ҐЇҐам Ї®Ј®ў®аЁ¬ ® бва®зЄҐ, Є®в®а п ®ЇаҐ¤Ґ«пҐв Ї®§ЁжЁо ®ЎкҐЄв  ў бвагЄвгаҐ
  Ё§ ‹ЁвбвЁ­Ј  4.4. Љ®®а¤Ё­ вл (е®,г®) ®ЇЁблў ов ­ з «м­го Ї®§ЁжЁо ®ЎкҐЄв  ­ 
  Ї«®бЄ®бвЁ.
  Њ­®Ј®гЈ®«м­ЁЄ Ё«Ё ®ЎкҐЄв аЁбгҐвбп ®в­®бЁвҐ«м­® ­ з «м­®© Ї®§ЁжЁЁ. ‚ᥠнв®
  Ї®¤ў®¤Ёв ­ б Є Ї®­пвЁо ®в­®бЁвҐ«м­®© бЁбвҐ¬л Є®®а¤Ё­ в. ‚®§¬®¦­®, ўл ­Ґ
  §­ ҐвҐ, зв® Є а⥧Ё ­бЄ п бЁб⥬  ­ §лў Ґвбп ҐйҐ ¬Ёа®ў®© бЁб⥬®©
  Є®®а¤Ё­ в. Џ®¤а §г¬Ґў Ґвбп, зв® ®­  Їа®бв® ®Ја®¬­ . ‚ в® ¦Ґ б ¬®Ґ ўаҐ¬п
  нЄа ­ ЏЉ Ё¬ҐҐв бў®о бЁб⥬㠪®®а¤Ё­ в, ­ §лў Ґ¬го нЄа ­­®©. ЏаЁ н⮬ ўбҐ
  ®ЎкҐЄвл ­  нЄа ­Ґ Ё¬Ґов бў®о, «®Є «м­го бЁб⥬㠪®®а¤Ё­ в. ќв® Ї®Є § ­® ­ 
  аЁб.4.5.
  Њл ¬®¦Ґ¬ ®ЇаҐ¤Ґ«Ёвм ®ЎкҐЄв ў «®Є «м­®© бЁб⥬Ґ Є®®а¤Ё­ в, § вҐ¬
  ЇаҐ®Ўа §®ў вм нвЁ Є®®а¤Ё­ вл ў ¬Ёа®ўлҐ Ё,­ Є®­Ґж, ­ аЁб®ў вм ­ и ®ЎкҐЄв ў
  нЄа ­­®© бЁб⥬Ґ Є®®а¤Ё­ в. ‚лЈ«п¤Ёв нв® ¤®бв в®з­® ¤®«ЈЁ¬ § ­пвЁҐ¬, ­® ­     

      ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
      і  ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД>   і
      і  і(0,0)                і                  (320,0)  і
      і  і                     і                           і
      і  і             (-5,5)  і    (5,5)                  і
      і  і                ЪДДДДЕДДДДї                      і
      і  і                і    Е(0,0)                      і
      і  і     ДДДДДДДДДВВЕВВВВЕВВВВЕВДДДДДДДДД            і
      і  і                і    і    і                      і
      і  і                АДДДДЕДДДДЩ                      і
      і  і             (-5,-5) і   (5,-5)                  і
      і  і                     і                           і
      і   (0,200)                                          і<-- ‚Ё¤Ґ®нЄа ­
      і                                                    і
      АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
           ђЁб.4.5. ‹®Є «м­ п бЁб⥬  Є®®а¤Ё­ в ®ЎкҐЄв  ­  нЄа ­Ґ.

                            - 90 -
      ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї  
      і  ^ (0,200)                                         і
      і  іY                                                і
      і  і                                                 і
      і  і                                                 і
      і  і                                                 і
      і  і                                                 і
      і  і                                                 і
      і  і                                                 і
      і  і                                                 і
      і  і                                                 і
      і  і                                                 і
      і  і                                                 і<-- ‚Ё¤Ґ®нЄа ­
      і  і(0,0)                                (320,0)     і
      і  АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД> X  і
      АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

      ђЁб.4.6. ЏҐаҐў®а зЁў ­ЁҐ нЄа ­  ¤«п ¤®бвЁ¦Ґ­Ёп Ї®«­®Ј® ᮮ⢥вбвўЁп
                б 1-¬ Єў ¤а ­в®¬ Є а⥧Ё ­бЄ®© бЁб⥬л.


  ¤Ґ«Ґ ўбҐ ®Є §лў Ґвбп ­ҐбЄ®«мЄ® Їа®йҐ. „ ў ©вҐ ¤®Ј®ў®аЁ¬бп, зв® г ­ б ­ 
  Є®¬ЇмовҐаҐ ¬Ёа®ўлҐ Ё нЄа ­­лҐ бЁбвҐ¬л Є®®а¤Ё­ в б®ўЇ ¤ ов. ќв® §­ зЁв, зв®:
     - ’®зЄ  (0,0) ­ е®¤Ёвбп ў «Ґў®¬ ўҐае­Ґ¬ гЈ«г нЄа ­ ;
     - ЏаЁ ¤ўЁ¦Ґ­ЁЁ ўЇа ў® 㢥«ЁзЁў Ґвбп §­ зҐ­ЁҐ •-Є®®а¤Ё­ вл;
     - ЏаЁ ЇҐаҐ¬ҐйҐ­ЁЁ ў­Ё§ 㢥«ЁзЁў Ґвбп Y-Є®®а¤Ё­ в .

  Ѓ« Ј®¤ ап нвЁ¬ ¤®Їг饭Ёп¬ ¬л Ї®«гз Ґ¬ нЄа ­­лҐ Є®®а¤Ё­ вл, Ї®е®¦ЁҐ ­ 
  Є®®а¤Ё­ вл 1-Ј® Єў ¤а ­в  (Ї®«®¦ЁвҐ«м­лҐ §­ зҐ­Ёп ®бҐ© • Ё Y), ­® ЇаЁ н⮬
  ­ ¤® ўбҐЈ¤  Ї®¬­Ёвм, зв® ®бм Y г ­ б ЇҐаҐўҐа­гв  ®в­®бЁвҐ«м­® нЄа ­ .
  ‚ ЇаЁ­жЁЇҐ, ў н⮬ ­Ґв ­ЁзҐЈ® бва и­®Ј®, е®вп Ё ­ҐбЄ®«мЄ® ­ҐЇаЁўлз­®. —в®Ўл
  згўбвў®ў вм ᥡп 㢥७­®, ЇҐаҐўҐа­Ґ¬ ®бм Y ў ­®а¬ «м­®Ґ Ї®«®¦Ґ­ЁҐ. ’®Ј¤ 
  в®зЄ  (0,0) Ўг¤Ґв ­ е®¤Ёвмбп ў «Ґў®¬ ­Ё¦­Ґ¬ гЈ«г нЄа ­ , Є Є нв® Ї®Є § ­®
  ­  аЁб.4.6.
  ’ҐЇҐам г ­ б Ґбвм ўбҐ б।бвў  ¤«п ЇаҐ¤бв ў«Ґ­Ёп ®ЎкҐЄв®ў ў Є®¬ЇмовҐаҐ. ‚
  б«Ґ¤го饬 а §¤Ґ«Ґ ¬л ®Ўбг¤Ё¬, Є Є ЇҐаҐ¬Ґй вм ®ЎкҐЄвл Ї® нЄа ­г,
  Ї®ў®а зЁў вм Ё ¬ бив ЎЁа®ў вм Ёе.

    ’а ­б«пжЁп ®ЎкҐЄв®ў
   -----------------------

  ’а ­б«пжЁҐ© ®ЎкҐЄв  Ўг¤Ґ¬ ­ §лў вм ҐЈ® ЇҐаҐ¬ҐйҐ­ЁҐ, ЇаЁ Є®в®а®¬ ­Ґ ¬Ґ­пҐвбп
  ­Ё гЈ®« Ї®ў®а®в , ­Ё а §¬Ґа ®ЎкҐЄв .„ ў ©вҐ ў®бЇ®«м§гҐ¬бп ­ иҐ© бвагЄвга®©

                             - 91 - 

                                     ®бм Y
                                    і
                         (-3.5, 5.5)Е  
                             .     ДЕД 
                                   ДЕД 
                                   ДЕД      (4, 3.5) 
                                   ДЕД      .
                                   ДЕД 
                                   ДЕД                   ®бм • 
              ДДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДДДД
                                   ДЕД                   
                                   ДЕД 
                                   ДЕД  .            .(8.5, 3)
                                   ДЕД(2,-3) 
                                   ДЕД          . (6, -5)
                            .      ДЕД 
                          (-4,-6)   і


              ђЁб.4.7. Њ­®Ј®гЈ®«м­ЁЄ, ®ЇаҐ¤Ґ«пойЁ© ўЁ¤ ­ иҐЈ®  бвҐа®Ё¤                                

  ¤ ­­ле ¤«п ®ЇаҐ¤Ґ«Ґ­Ёп Є®­ЄаҐв­®Ј® ®ЎкҐЄв , б Є®в®ал¬ Ўг¤Ґ¬
  нЄбЇҐаЁ¬Ґ­вЁа®ў вм Ё ў ¤ «м­Ґ©иҐ¬. Љ ЇаЁ¬Ґаг, Їгбвм нв® Ўг¤Ґв  бвҐа®Ё¤. Ќ 
  аЁб.4.7 Ї®Є § ­ ҐЈ® ў­Ґи­Ё© ўЁ¤. ‹ЁбвЁ­Ј 4.5 ᮤҐа¦Ёв да Ј¬Ґ­в, ®ЇЁблў ойЁ©
  ­ и  бвҐа®Ё¤.

  ‹ЁбвЁ­Ј 4.5. ЋЇЁб ­ЁҐ  бвҐа®Ё¤ .
  -------------------------------------------------------------------------
  Object asteroid;

  // ®ЇаҐ¤Ґ«Ё¬ Ї®«п
          asteroid.num_vertices = 6;  // иҐбвЁ ўҐаиЁ­ Ўг¤Ґв ¤®бв в®з­®
          asteroid.color = 1;      // жўҐв  бвҐа®Ё¤  - бЁ­Ё©

          astreoid.x0 = 320;       // Ї®¬ҐбвЁвм  бвҐа®Ё¤ ў 業ва нЄа ­ 
          asteroid.y0 = 240;
  // ⥯Ґам § ¤ Ґ¬ Є®®а¤Ё­ вл ўҐаиЁ­ Є Є ᬥ饭Ёп ®в­®бЁвҐ«м­®
  // в®зЄЁ е0, г0.        
          asteroid.vertices[0].x =  4.0;
          asteroid.vertices[0].y =  3.5;
          asteroid.vertices[1].x =  8.5;
          asteroid.vertices[1].y = -3.0;
          asteroid.vertices[2].x =  6.0;
          asteroid.vertices[2].y = -5.0;
          asteroid.vertices[3].x =  2.0;
          asteroid.vertices[3].y = -3.0;
          asteroid.vertices[4].x = -4.0;
          asteroid.vertices[4].y = -6.0;
          asteroid.vertices[5].x = -3.5;
          asteroid.vertices[5].y =  5.5;

  -------------------------------------------------------------------------
                                  - 92 -
  Љ®­Ґз­®, ў ­ бв®пйЁе ЁЈа е ў ¬ ­Ґ ЇаЁ¤Ґвбп в Є ®ЇаҐ¤Ґ«пвм ўбҐ бў®Ё ®ЎкҐЄвл. 
  Ќ Їа®вЁў, ўл ¬®¦ҐвҐ § Јаг§Ёвм Є®®а¤Ё­ вл ўҐаиЁ­ Ё§ д ©«  Ё«Ё бЈҐ­ҐаЁа®ў вм
  Ёе (­ ЇаЁ¬Ґа, AutoCad ЁбЇ®«м§гҐв д®а¬ в DXF, ᮤҐа¦ йЁ© бЇЁбЄЁ ўҐаиЁ­
  ў¬ҐбвҐ б ¤агЈЁ¬Ё бў®©бвў ¬Ё ®ЎкҐЄв ; Ї®б«Ґ в®Ј® Є Є DXF-д ©« § Ја㦥­,
  Є®®а¤Ё­ вл ўҐаиЁ­ бзЁвлў овбп Ё§ ­ҐЈ® ў ᮮ⢥вбвўгойЁҐ бвагЄвгал). Ќ®
  Ї®бЄ®«мЄг ¬л ᮧ¤ Ґ¬ ўбҐЈ® ®¤Ё­  бвҐа®Ё¤, в® ¬®¦­® ®ЇЁб вм ҐЈ® Ё ўагз­го.
  ’ҐЇҐам ¤ ў ©вҐ згвм-згвм Ї®¤г¬ Ґ¬. Њл ¬®¦Ґ¬ ­ аЁб®ў вм ўҐаиЁ­л ®ЎкҐЄв 
  ®в­®бЁвҐ«м­® ҐЈ® Ї®«®¦Ґ­Ёп ­  нЄа ­Ґ, Є®в®а®Ґ ®ЇЁблў Ґвбп Є Є (е®,г®). …б«Ё
  ¦Ґ ¬л е®вЁ¬ ЇҐаҐ¤ўЁ­гвм ®ЎкҐЄв, в® ¬®¦­® ᤥ« вм в Є:
   е®=е®+dе
   г®=г®+dг                               
  Ј¤Ґ: dе Ё dг - нв® Є®«ЁзҐбвў® ЇЁЄбҐ«Ґ©, ­  Є®в®а®Ґ ¬л е®вЁ¬ ЇҐаҐ¬ҐбвЁвм
  ®ЎкҐЄв Ї® ®бЁ X Ё«Ё Y.
  ќв® ўбҐ, зв® ¬®¦­® бЄ § вм ® ва ­б«пжЁЁ ®ЎкҐЄв®ў. ’ҐЇҐам Ї®Ј®ў®аЁ¬ ®
  ¬ бив ЎЁа®ў ­ЁЁ.

     Њ бив ЎЁа®ў ­ЁҐ ®ЎкҐЄв®ў
   -----------------------------

  Њ бив ЎЁа®ў ­ЁҐ ®§­ з Ґв Ё§¬Ґ­Ґ­ЁҐ а §¬Ґа  ®ЎкҐЄв . Џ®б¬®ваЁ¬ ¤«п ЇаЁ¬Ґа 
  ­  аЁб.4.8. ЂбвҐа®Ё¤ ­  ­Ґ¬ ў 2 а §  Ў®«миҐ, 祬 ­  аЁб.4.7. ќв® ў® ¬­®Ј®¬
  ®Ўкпб­пҐв ЇаЁ­жЁЇл ¬ бив ЎЁа®ў ­Ёп. ‚бҐ, зв® ­ ¬ ­ ¤® ᤥ« вм, нв® г¬­®¦Ёвм
  Є®®а¤Ё­ вл Є ¦¤®© Ё§ ўҐаиЁ­ ®ЎкҐЄв  ­  Є®нддЁжЁҐ­в ¬ бив ЎЁа®ў ­Ёп.
  ”а Ј¬Ґ­в Є®¤  ў ‹ЁбвЁ­ЈҐ 4.6 Ї®Є §лў Ґв, Є Є нв® ¤Ґ« Ґвбп ¤«п бвагЄвгал
  ®ЎкҐЄв , ®ЇаҐ¤Ґ«Ґ­­®© ­ ¬Ё а ­ҐҐ.

  ‹ЁбвЁ­Ј 4.6. Њ бив ЎЁа®ў ­ЁҐ  бвҐа®Ё¤ .
  -------------------------------------------------------------------------
  void Scale_Object(object_ptr object,float scale)
  {
  int index;

  // ¤«п ўбҐе ўҐаиЁ­ ¬ бив ЎЁа㥬 е- Ё г-Є®¬Ї®­Ґ­вл

  for (index = 0; index<object->num_vertices; index++)
       {
       object->vertices[index].x *= scale; 
       object->vertices[index].y *= scale; 
       }  // Є®­Ґж жЁЄ«  for

  }  // Є®­Ґж дг­ЄжЁЁ
  __________________________________________________________________________
                        - 93 -

                                     і®бм Y
                                     Е  
                                     Е  
                           (-7,11)   Е  
                              .      Е  
                                     Е       (8,7)
                                     Е       .
                                     Е  
                                     Е  
                                     Е                      ®бм •
    ДДДДДДДДДДДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДЕДДДДДДДДД
                                     Е                       
                                     Е  
                                     Е   .             . (17,-6)
                                     Е (4,-6)
                                     Е           .
                             .       Е          (12,-10)
                          (-8,-12)   Е  
                                     Е  
                                     і  

                     ђЁб.4.8. Ѓ®«ми®© ЂбвҐа®Ё¤.

  ”г­ЄжЁп Ё§ ‹ЁбвЁ­Ј  4.6 а Ў®в Ґв Їг⥬ ¬ бив ЎЁа®ў ­Ёп Є®®а¤Ё­ в Є ¦¤®© Ё§
  ўҐаиЁ­ ®ЎкҐЄв . …б«Ё ­ ¬ ЇаЁ¤Ґв ў Ј®«®ўг 㢥«ЁзЁвм ­ и ®ЎкҐЄв " бвҐа®Ё¤" ў
  2 а § , в® ­ ¬ Ї®вॡгҐвбп ­ ЇЁб вм б«Ґ¤го饥:

  Scale_Object((object_ptr)&asteroid,2,0);

  ‘ нвЁ¬, ўа®¤Ґ, ўбҐ. ’ҐЇҐам ¬л 㦥 Ј®в®ўл ЇаЁбвгЇЁвм Є ўа йҐ­Ёо ®ЎкҐЄв . 

            ‚а йҐ­ЁҐ ®ЎкҐЄв®ў 
         ------------------------   
  „«п в®Ј®, зв®Ўл ўа й вм ®ЎкҐЄв, ¬л ¤®«¦­л Ї®ўҐа­гвм ҐЈ® ў®ЄагЈ ®¤­®© Ё§
  Є®®а¤Ё­ в. ‚ ¤ўг嬥୮© Ја дЁЄҐ ¤«п нв®Ј® ®Ўлз­® ўлЎЁа Ґвбп ®бм Z. Џ®Є  ¬л
  ­ е®¤Ё¬бп ў ¤ўг嬥୮¬ ¬ЁаҐ, ­ б ­Ґ ЎҐбЇ®Є®Ёв ваҐвмҐ Ё§¬ҐаҐ­ЁҐ - ¬л Їа®бв®
  ­Ґ ЇаЁ¤ Ґ¬ Ґ¬г §­ зҐ­Ёп.
                           - 94 -       
  …б«Ё нЄа ­ - нв® Ї«®бЄ®бвм X-Y, в® ®бм Z - нв® ЇҐаЇҐ­¤ЁЄг«па Є ®бп¬ X Ё Y. 
  ’ ЄЁ¬ ®Ўа §®¬, Ґб«Ё ¬л ®ЇЁблў Ґ¬ ­ иЁ ®ЎкҐЄвл ®в­®бЁвҐ«м­® ¤ўг嬥୮Ј®
  ¬Ёа , в® г ­ б Ї®пў«пҐвбп ў®§¬®¦­®бвм ўа й вм Ёе ®б­®бЁвҐ«м­® ®бЁ Z.
  ‘«Ґ¤гойЁҐ д®а¬г«л Ї®§ў®«пов ўа й вм Їа®Ё§ў®«м­го в®зЄг (X,Y) ®в­®бЁвҐ«м­®
  ®бЁ Z:
  new_x = x*cos(angle) - y*sin(angle)
  new_y = y*cos(angle) + y*sin(angle)

  Ј¤Ґ: angle - нв® гЈ®«, ­  Є®в®ал© ўл е®вЁвҐ Ї®ўҐа­гвм в®зЄг. Ља®¬Ґ нв®Ј®
  ў ¬ бв®Ёв Ї®¬­Ёвм ҐйҐ Ї аг ўҐйҐ©:

    - Џ®«®¦ЁвҐ«м­лҐ гЈ«л Ё¬Ґов нд䥪⠢а йҐ­Ёп Ї® з б®ў®© бв५ЄҐ;
    - ЋваЁж вҐ«м­лҐ гЈ«л Ё¬Ґов нд䥪⠢а йҐ­Ёп Їа®вЁў з б®ў®© бв५ЄЁ.

  Ќ ¤® в Є¦Ґ ­Ґ § Ўлў вм, зв® ‘Ё ЁбЇ®«м§гҐв ¤«п бў®Ёе дг­ЄжЁ© а ¤Ё ­л,   ­Ґ
  Ја ¤гбл, Ё ўбҐ ўл§®ўл ваЁЈ®­®¬ҐваЁзҐбЄЁе дг­ЄжЁ© ¤®«¦­л ЇҐаҐ¤ ў вм ў
  Ї а ¬Ґва е в Є¦Ґ а ¤Ё ­л. „«п в®Ј®, зв®Ўл ЇҐаҐўҐбвЁ а ¤Ё ­л ў Ја ¤гбл, ¬л
  ¤®«¦­л ­ ЇЁб вм Їа®бвлҐ ¬ Єа®бл.

  Deg_To_Rad(deg) {pi*deg/180;}
  Rad_To_Deg(rad) {180*rad/pi;}

  „агЈЁ¬Ё б«®ў ¬Ё, нв® §­ зЁв, зв® ў ЄагЈҐ 360 Ја ¤гб®ў Ё«Ё 2еPi а ¤Ё ­.
  ’ҐЇҐам ­ ¬ ­г¦­® ­ ЇЁб вм дг­ЄжЁо ¤«п ўа йҐ­Ёп ®ЎкҐЄв . „ ў ©вҐ Їа®бв®
  ЁбЇ®«м§гҐ¬ д®а¬г«л, ­Ґ § ¤г¬лў пбм ® ⮬, Є Є Ё Ї®зҐ¬г ®­Ё а Ў®в ов.
  ”г­ЄжЁп ў ‹ЁбвЁ­ЈҐ 4.7 ¤Ґ« Ґв Ё¬Ґ­­® в®, зв® ¬л е®вЁ¬.

  ‹ЁбвЁ­Ј 4.7.‚а йҐ­ЁҐ ®ЎкҐЄв .
  --------------------------------------------------------------------------                        
  void Rotate_Object(object_ptr object, float angle)
  {
  int index;
  float x_new, y_new,cs,sn;

  // pre-compute sin and cos
  cs = cos(angle);
  sn = sin(angle);

  // for each vertex rotate it by angle
  for (index=0; index<object->num_vertices; index++)
        {
         // rotate the vertex
    x_new  = object->vertices[index].x * cs -  object->vertices[index].y * sn;
    y_new  = object->vertices[index].y * cs + object->vertices[index].x * sn;

        // store the rotated vertex back into structure
        object->vertices[index].x = x_new;
        object->vertices[index].y = y_new;    

        } // end for index

  } // end Rotate_Object
  -------------------------------------------------------------------------


                                - 95 -

  „г¬ о, зв® ­ ¤® Є®Ґ-зв® ®Ўкпб­Ёвм. џ ўлзЁб«по § а ­ҐҐ §­ зҐ­Ёп бЁ­гб  Ё 
  Є®бЁ­гб  ¤«п ¤ ­­®Ј® гЈ« . ‡ зҐ¬, бЇа®бЁвҐ ўл. ЋвўҐв Їа®бв - ¤«п бЄ®а®бвЁ.
  €Ў® § ­Ё¬ вмбп ўлзЁб«Ґ­Ёп¬Ё ваЁЈ®­®¬ҐваЁзҐбЄЁе дг­ЄжЁ© ў Їа®жҐбᥠࠡ®вл
  Їа®Ја ¬¬л ¬®¦­® Ї®§ў®«Ёвм ᥡҐ в®«мЄ®, Ё¬Ґп ¬ вҐ¬ вЁзҐбЄЁ© б®Їа®жҐбб®а.
  ’ҐЇҐам ­ бв «® ўаҐ¬п ­ ЇЁб вм зв®-­ЁЎг¤м Ї®бҐа쥧­Ґ©. Њ­Ґ Є ¦Ґвбп, зв® ­ ¤®
  Ўл ­ ЇЁб вм зв®-в® Ў®«ҐҐ нЄбва ў Ј ­в­®Ґ, 祬 ®¤Ё­®ЄЁ©  бвҐа®Ё¤. Џгбвм нв®
  Ўг¤Ґв е®вп Ўл ­ҐбЄ®«мЄ®  бвҐа®Ё¤®ў. „ ў ©вҐ б­ з «  бЇ« ­Ёа㥬 ­ иЁ
  ¤ «м­Ґ©иЁҐ ¤Ґ©бвўЁп.
  џ е®вҐ« Ўл Ё¬Ґвм Ї®«Ґ  бвҐа®Ё¤®ў а §«Ёз­ле а §¬Ґа®ў ў Є®«ЁзҐб⢥ Ў®«ҐҐ 100
  ивгЄ. € в Є, зв®Ўл ®­Ё ¬®Ј«Ё ўа й вмбп. „«п нв®Ј® Їа®Ја ¬¬  ¤®«¦­  Ё¬Ґвм
  б«Ґ¤гойго бв४вгаг:
      Ј 1. - €­ЁжЁЁа®ў вм Ї®«Ґ  бвҐа®Ё¤®ў;
      Ј 2. - ‘вҐаҐвм Ї®«Ґ  бвҐа®Ё¤®ў;
      Ј 3. - ’а ­бд®а¬Ёа®ў вм Ї®«Ґ  бвҐа®Ё¤®ў;
      Ј 4. - Ќ аЁб®ў вм Ї®«Ґ  бвҐа®Ё¤®ў;
      Ј 5. - ЏҐаҐ©вЁ Є  Јг 2, Ї®Є  Ї®«м§®ў вҐ«м ­Ґ ­ ¦¬Ґв Є­®ЇЄг.

     —в®Ўл ᤥ« вм нв® Їа®йҐ, п ¤®Ў ўЁ« 3 ­®ўле Ї®«п Є ­ иҐ© бвагЄвгаҐ: ®¤­®
  ¤«п гЈ«  Ї®ў®а®в  Ё ¤ў  - ¤«п бЄ®а®бвЁ (楫ЁЄ®¬ Їа®Ја ¬¬  ЇаҐ¤бв ў«Ґ­  ў
  ‹ЁбвЁ­ЈҐ 4.8).

  ‹ЁбвЁ­Ј 4.8. Џа®Ја ¬¬ , Є®в®а п аЁбгҐв Ї®«Ґ  бвҐа®Ё¤®ў (FIELD.C).
  --------------------------------------------------------------------------

// I N C L U D E S ///////////////////////////////////////////////////////////

#include <stdio.h> // include the basics
#include <graph.h> // include Microsofts Graphics Header
#include <math.h>  // include math stuff

// D E F I N E S   ///////////////////////////////////////////////////////////

#define NUM_ASTEROIDS 10
#define ERASE 0
#define DRAW  1

// T Y P E D E F S ///////////////////////////////////////////////////////////

// the structure for a vertex

typedef struct vertex_typ
           {
           float x,y; // a single point in the 2-D plane.
           } vertex, *vertex_ptr;


// the structure for an object

typedef struct object_typ
           {
           int num_vertices;     // number of vertices in this object
           int color;            // color of object
           float xo,yo;          // position of object
           float x_velocity;     // x velocity of object
           float y_velocity;     // y velocity of object
           float scale;          // scale factor
           float angle;          // rotation rate
           vertex vertices[16];  // 16 vertices
           } object, *object_ptr;



// G L O B A L S /////////////////////////////////////////////////////////////


object asteroids[NUM_ASTEROIDS];


// F U N C T I O N S /////////////////////////////////////////////////////////

void Delay(int t)
{

// take up some compute cycles

float x = 1;

while(t-->0)
     x=cos(x);


} // end Delay

//////////////////////////////////////////////////////////////////////////////

void Scale_Object(object_ptr object,float scale)
{
int index;

// for all vertices scale the x and y component

for (index = 0; index<object->num_vertices; index++)
      {
      object->vertices[index].x *= scale;
      object->vertices[index].y *= scale; 
      } // end for index

} // end Scale_Object

//////////////////////////////////////////////////////////////////////////////

void Rotate_Object(object_ptr object, float angle)
{
int index;
float x_new, y_new,cs,sn;

// pre-compute sin and cos
cs = cos(angle);
sn = sin(angle);

// for each vertex rotate it by angle
for (index=0; index<object->num_vertices; index++)
      {
       // rotate the vertex
      x_new  = object->vertices[index].x * cs - object->vertices[index].y * sn;
      y_new  = object->vertices[index].y * cs + object->vertices[index].x * sn;

      // store the rotated vertex back into structure
      object->vertices[index].x = x_new;
      object->vertices[index].y = y_new;    

      } // end for index

} // end Rotate_Object

//////////////////////////////////////////////////////////////////////////////

void Create_Field(void)
{

int index;

for (index=0; index<NUM_ASTEROIDS; index++)
    {

    // fill in the fields

    asteroids[index].num_vertices = 6;
    asteroids[index].color = 1  + rand() % 14; // always visable
    asteroids[index].xo    = 41 + rand() % 599;
    asteroids[index].yo    = 41 + rand() % 439;

    asteroids[index].x_velocity = -10 + rand() % 20;
    asteroids[index].y_velocity = -10 + rand() % 20;
    asteroids[index].scale      = (float)(rand() % 30) / 10;
    asteroids[index].angle      = (float)(- 50 + (float)(rand() % 100)) / 100;

    asteroids[index].vertices[0].x = 4.0;
    asteroids[index].vertices[0].y = 3.5;
    asteroids[index].vertices[1].x = 8.5;
    asteroids[index].vertices[1].y = -3.0;
    asteroids[index].vertices[2].x = 6;
    asteroids[index].vertices[2].y = -5;
    asteroids[index].vertices[3].x = 2;
    asteroids[index].vertices[3].y = -3;
    asteroids[index].vertices[4].x = -4;
    asteroids[index].vertices[4].y = -6;
    asteroids[index].vertices[5].x = -3.5;
    asteroids[index].vertices[5].y = 5.5;

    // now scale the asteroid to proper size

    Scale_Object((object_ptr)&asteroids[index], asteroids[index].scale);

    } // end for index

} // end Create_Field

//////////////////////////////////////////////////////////////////////////////

void Draw_Asteroids(int erase)
{

int index,vertex;
float xo,yo;

for (index=0; index<NUM_ASTEROIDS; index++)
    {

    // draw the asteroid

    if (erase==ERASE)
       _setcolor(0);
    else
       _setcolor(asteroids[index].color);

    // get position of object
    xo = asteroids[index].xo;
    yo = asteroids[index].yo;

    // moveto first vertex

    _moveto((int)(xo+asteroids[index].vertices[0].x),
     (int)(yo+asteroids[index].vertices[0].y));
    for (vertex=1; vertex<asteroids[index].num_vertices; vertex++)
        {
        _lineto((int)(xo+asteroids[index].vertices[vertex].x),
         (int)(yo+asteroids[index].vertices[vertex].y));
        } // end for vertex

    // close object

    _lineto((int)(xo+asteroids[index].vertices[0].x),
      (int)(yo+asteroids[index].vertices[0].y));
   } // end for index

} // end Draw_Asteroids
//////////////////////////////////////////////////////////////////////////////

void Translate_Asteroids()
{
int index;

for (index=0; index<NUM_ASTEROIDS; index++)
    {
    // translate current asteroid

    asteroids[index].xo += asteroids[index].x_velocity;
    asteroids[index].yo += asteroids[index].y_velocity;

    // collision detection i.e. bounds check

    if (asteroids[index].xo > 600 || asteroids[index].xo < 40)
        {
        asteroids[index].x_velocity = -asteroids[index].x_velocity;
        asteroids[index].xo += asteroids[index].x_velocity;
        }

    if (asteroids[index].yo > 440 || asteroids[index].yo < 40)
        {
        asteroids[index].y_velocity = -asteroids[index].y_velocity;
        asteroids[index].yo += asteroids[index].y_velocity;
        }
    } // end for index
} // end Translate_Asteroids

//////////////////////////////////////////////////////////////////////////////

void Rotate_Asteroids(void)
{
int index;
for (index=0; index<NUM_ASTEROIDS; index++)
    {
    // rotate current asteroid
    Rotate_Object((object_ptr)&asteroids[index], asteroids[index].angle);

    } // end for index

} // end Rotate_Asteroids

//////////////////////////////////////////////////////////////////////////////

void main(void)
{

// put the computer into graphics mode
_setvideomode(_VRES16COLOR); //  640x480 in 16 colors

// initialize
Create_Field();

while(!kbhit())
     {
     // erase field

     Draw_Asteroids(ERASE);

     // transform field

     Rotate_Asteroids();

     Translate_Asteroids();

     // draw field

     Draw_Asteroids(DRAW);

     // wait a bit since we aren't syncing or double buffering...nuff said

     Delay(500);

     } // end while

// place the computer back into text mode

_setvideomode(_DEFAULTMODE);

} // end main
--------------------------------------------------------------------------
                               - 101 -

  Ќ Ўа ў, ®вЄ®¬ЇЁ«Ёа®ў ў Ё § ЇгбвЁў Їа®Ја ¬¬г Ё§ ‹ЁбвЁ­Ј  4.8, ўл гўЁ¤ЁвҐ ­ 
  нЄа ­Ґ Ї®«Ґ  бвҐа®Ё¤®ў ў¬Ґб⥠ᮠ¬­®¦Ґбвў®¬ а §­®жўҐв­ле Є ¬­Ґ©,
  ®вбЄ ЄЁў ойЁе ®в Ја ­Ёж нЄа ­  (®ЇаҐ¤Ґ«Ґ­ЁҐ д Єв  бв®«Є­®ўҐ­Ёп Ўг¤Ґв
  Ї®¤а®Ў­ҐҐ Ё§« Ј вмбп ¤ «ҐҐ ў нв®© Ј« ўҐ,   в Є¦Ґ ў Ј« ўҐ 11-© "Ђ«Ј®аЁв¬л,
  бвагЄвгал ¤ ­­ле Ё ¬Ґв®¤®«®ЈЁп ўЁ¤Ґ®ЁЈа").
     ’ҐЇҐам ­ ¬ ­ ¤® ҐйҐ Є®Ґ-зв® ®Ўбг¤Ёвм: 

   - ЏҐаў®Ґ, ­  зв® ўл ®Ўа вЁ«Ё ў­Ё¬ ­ЁҐ, нв® в®, зв® ®Ўа §л б«ҐЈЄ  ¬Ґ«мЄ ов.
     ќв® бўп§ ­® б ⥬, зв® Їа®Ја ¬¬  д®а¬ЁагҐв Ё§®Ўа ¦Ґ­ЁҐ ў в®в ¦Ґ ¬®¬Ґ­в,
     Є®Ј¤  Їа®Ёб室Ёв ЇҐаҐаЁб®ўЄ  нЄа ­ .
     ќЄа ­ - нв® ¬­®¦Ґбвў® «Ё­Ё©, Є®в®алҐ аЁбговбп ­  ¬®­Ёв®аҐ б«Ґў  ­ Їа ў®
     Ё ᢥаег ў­Ё§ ў иҐ© ўЁ¤Ґ®Є ав®©. Џа®Ў«Ґ¬  § Є«оз Ґвбп ў ⮬, зв® ¬л ­Ґ
     ¬®¦Ґ¬ Ё§¬Ґ­пвм ўЁ¤Ґ®ЎгдҐа, Ї®Є  ­  нЄа ­Ґ зв®-в® аЁбгҐвбп. ‚ 5-© Ј« ўҐ
     "‘ҐЄаҐвл VGA-Є ав" ¬ў ®Ўбг¤Ё¬ аЁб®ў ­ЁҐ ўбҐЈ® нЄа ­  楫ЁЄ®¬ ў ®в¤Ґ«м­л©
     ЎгдҐа б Ї®б«Ґ¤гойЁ¬ ЇҐаҐ¬ҐйҐ­ЁҐ¬ ҐЈ® ў ўЁ¤Ґ®Ї ¬пвм;
   - „агЈ п Їа®Ў«Ґ¬ , бўп§ ­­ п б ¬Ґаж ­ЁҐ¬, § Є«оз Ґвбп ў ⮬, зв® ¬л
     ЁбЇ®«м§гҐ¬ Ја дЁзҐбЄго ЎЁЎ«Ё®вҐЄг Microsoft C, Є®в®а п ­Ґ ®зҐ­м Ўлбва®
     а Ў®в Ґв. ‚л ¤®«¦­л Ї®­Ё¬ вм, зв® Microsoft ­Ґ ®ЇвЁ¬Ё§Ёа®ў « ҐҐ ¤«п
     ўлб®Є®© Їа®Ё§ў®¤ЁвҐ«м­®бвЁ Ё бЄ®а®бвЁ а Ў®вл;
   - Џа®Ја ¬¬  ЁбЇ®«м§гҐв зЁб«  б Ї« ў о饩 § Їпв®©, Є®в®алҐ ўЇ®б«Ґ¤бвўЁЁ
     Ўг¤гв § ¬Ґ­Ґ­л зЁб« ¬Ё б дЁЄбЁа®ў ­­®© § Їпв®©;
   - ‚бп Їа®Ја ¬¬  б®ўҐа襭­® ­Ґнд䥪⨢­  б в®зЄЁ §аҐ­Ёп ­ ЇЁб ­Ёп ўЁ¤Ґ®ЁЈа.
     ‚бҐ, зв® ®­  ¤Ґ« Ґв, ўлЇ®«­Ґ­® ў Є« ббЁзҐбЄ®©, "Є­Ё¦­®©" ¬ ­ҐаҐ. “
     а §а Ў®взЁЄ®ў ўЁ¤Ґ®ЁЈа Ґбвм Їа ўЁ«® ­®¬Ґа 1: "‚ᥣ¤  Ґбвм бЇ®б®Ў ᤥ« вм
     в®, зв® Є ¦Ґвбп ­Ґў®§¬®¦­л¬". …б«Ё Ў нв® Ўл«® ­Ґ в Є, в® Ї®«®ўЁ­ 
     ўЁ¤Ґ®ЁЈа ­ЁЄ®Ј¤  ­Ґ Ўл«  Ўл ­ ЇЁб ­ , Ї®бЄ®«мЄг ЏЉ ­Ґ ў б®бв®п­ЁЁ
     ®ЎҐбЇҐзЁвм ­г¦­®© Їа®Ё§ў®¤ЁвҐ«м­®бвЁ.

  (Џ®ўҐам⥠¬­Ґ, DOOM - нв® «гзиЁ© ЇаЁ¬Ґа ¬®Ё¬ б«®ў ¬. …б«Ё Ўл п ҐЈ® ­Ґ
  ўЁ¤Ґ«, в® ­ЁЄ®Ј¤  ­Ґ Ї®ўҐаЁ« Ўл, зв® в Є®Ґ ў®§¬®¦­®. Ќ®, Є Є ¬л §­ Ґ¬, DOOM
  бгйҐбвўгҐв, Ё нв® ­ Ё«гзиЁ© ЇаЁ¬Ґа ЁбЇ®«м§®ў ­Ёп Їа ўЁ«м­ле ¬Ґв®¤®ў ¤«п
  ᮧ¤ ­Ёп ॠ«м­®Ј® ¬Ёа  ­  Є®¬ЇмовҐа­®¬ нЄа ­Ґ.) 


          ЋвбҐзҐ­Ёп
       ------------------
  Њ­Ґ ­Ґ е®вҐ«®бм Ўл гЈ«гЎ«пвмбп ў ⥮аЁо, п б®ЎЁа обм а ббЄ § вм ®Ў
  ®вбҐзҐ­ЁЁ Їа®бв® ¤«п Ї®«­®вл Ё§«®¦Ґ­Ёп. Ќ ¬ Ў®«ҐҐ Ё­вҐаҐб­л бЇҐжЁ «м­лҐ
  бЇ®б®Ўл ®вбҐзҐ­Ёп,   ­Ґ ®Ўй п ⥮аЁп. Џ®н⮬㠤 ў ©вҐ Ё§гзЁ¬ в®«мЄ®
  ®б­®ў­лҐ Є®­жҐЇжЁЁ Ё Ёе ЇаЁ¬Ґ­Ґ­ЁҐ ў ­ ЁЎ®«ҐҐ ®ЎйҐ¬ ўЁ¤Ґ.
  ЋвбҐзҐ­ЁҐ ®§­ з Ґв аЁб®ў ­ЁҐ в®«мЄ® з бвЁ ўЁ¤Ґ®®Ўа § , ®Ја ­ЁзҐ­­®Ј®
  § а ­ҐҐ § ¤ ­­л¬Ё Ја ­Ёж ¬Ё. ЏаҐ¤бв ўм⥠ᥡҐ ®ЎкҐЄв, Є®в®ал© ЇҐаҐ¬Ґй Ґвбп
  Ї® нЄа ­г. „®©¤п ¤® ҐЈ® Ја ­Ёжл, ўЁ¤Ё¬ п з бвм ®ЎкҐЄв  ­ зЁ­ Ґв 㬥­ми вмбп
  Ё ®­ Ї®б⥯Ґ­­® г室Ёв б нЄа ­ . ‚л бзЁв ҐвҐ нв® б ¬® б®Ў®© ࠧ㬥ойЁ¬бп,  
                            - 102 -
  Їа®Ја ¬¬Ёбвг ­ ¤® §­ вм, Є Єго з бвм ®Ўа §  ®­ ¤®«¦Ґ­ Ї®Є § вм ­  нЄа ­Ґ.
  ‚лзЁб«Ґ­Ёп §¤Ґбм ¬®Јгв Ўлвм б«®¦­л¬Ё Ё«Ё Їа®бвл¬Ё - ўбҐ § ўЁбЁв ®в
  бЁвг жЁЁ.
        ЋвбҐзҐ­Ёп ¬®Јгв Їа®Ё§ў®¤Ёвмбп ­  ¤ўге "га®ў­пе".
      - “а®ўҐ­м ®Ўа § ;
      - “а®ўҐ­м ®ЎкҐЄв .                                 

  ЋвбҐзҐ­ЁҐ ®Ў« бвЁ ®Ўа §®ў ®б­®ўлў Ґвбп ­  Їа®ўҐаЄҐ Є ¦¤®© в®зЄЁ, Є®в®а п
  ¬®¦Ґв Ўлвм ­ аЁб®ў ­  ­  нЄа ­Ґ ў ®вᥪ Ґ¬®© ®Ў« бвЁ. Ќ ЇаЁ¬Ґа, Ґб«Ё ¬л
  Ё¬ҐҐ¬ Єў ¤а в­го ®Ў« бвм, Є®в®а п б®ЇаЁЄ б Ґвбп б Ја ­Ёж ¬Ё нЄа ­  ў ०Ё¬Ґ
  13h (320е200), в® ¬л ­Ґ Ўг¤Ґ¬ аЁб®ў вм в®зЄЁ, ўл室пйЁҐ §  Ја ­Ёжг. ’®зЄЁ,
  Є®в®алҐ ­ е®¤пвбп ў­гваЁ ®Ў« бвЁ Ё ®Ја ­ЁзҐ­л Є®®а¤Ё­ в ¬Ё 0-319 Ї® ®бЁ • Ё
  0-199 Ї® ®бЁ Y, Ўг¤гв ­ аЁб®ў ­л, ®бв «м­лҐ - ­Ґв.
  Џ®бЄ®«мЄг ўбҐ ®ЎкҐЄвл, Є®в®алҐ ¬®Јгв Ї®пў«пвмбп ­  нЄа ­Ґ Є®¬ЇмовҐа ,
  б®бв®пв Ё§ в®зҐЄ, в® нв®в ¬Ґв®¤ ­ ЁЎ®«ҐҐ Їа®бв ў ॠ«Ё§ жЁЁ. Љ ЄЁҐ
  ЈҐ®¬ҐваЁзҐбЄЁҐ дЁЈгал аЁбговбп, ў н⮬ б«гз Ґ ­Ґ Ё¬ҐҐв §­ зҐ­Ёп. Ѓг¤м в®
  «Ё­ЁЁ, ваҐгЈ®«м­ЁЄЁ, ЎЁв®ўлҐ Є авл Ё«Ё ҐйҐ зв®-­ЁЎг¤м - ўбҐ ®­Ё ЁбЇ®«м§гов
  ўл§®ў дг­ЄжЁЁ аЁб®ў ­Ёп в®зЄЁ. …б«Ё дг­ЄжЁп, аЁбгой п в®зЄг, ®ЇаҐ¤Ґ«пҐв,
  зв® в®зЄ  ўл室Ёв §  Ја ­Ёжл ®Ў« бвЁ, в® ¤ ­­ п в®зЄ  ­Ґ бв ўЁвбп.
  Ћб­®ў­ п Їа®Ў«Ґ¬ , ў®§­ЁЄ ой п ЇаЁ а §а Ў®вЄҐ  «Ј®аЁв¬®ў ®вбҐзҐ­Ёп - нв®
  ЎлбвதҐ©бвўЁҐ. „ ў ©вҐ а бᬮваЁ¬ Їа®жҐбб аЁб®ў ­Ёп «Ё­ЁЁ. „«п нв®Ј®
  ¤®бв в®з­® г§­ вм, Ј¤Ґ «Ё­Ёп ­ е®¤Ёвбп ў ®вᥪ Ґ¬®© ®Ў« бвЁ. ‚л ¬®¦ҐвҐ
  ®ЇаҐ¤Ґ«Ёвм в®зЄЁ ЇҐаҐбҐзҐ­Ёп «Ё­ЁЁ б Ја ­Ёж ¬Ё ®Ў« бвЁ - Є 祬г а §ЎЁа вмбп
  б Є ¦¤®© в®зЄ®©, Ґб«Ё ¬®¦­® а бб¬ ваЁў вм ®Ў« бвм 楫ЁЄ®¬. ЌҐЄ®в®алҐ
  ўлзЁб«Ґ­Ёп Ї®¬®Јгв ®ЇаҐ¤Ґ«Ёвм, Ј¤Ґ «Ё­Ёп Ўг¤Ґв а §®аў ­ . ќв® ®б­®ў 
   «Ј®аЁв¬®ў, Ї®§ў®«пойЁе ўлЇ®«­пвм ®вбҐзҐ­Ёп ®Ў« бвЁ ®ЎкҐЄв®ў.
  Ђ«Ј®аЁв¬л ®вбҐзҐ­Ёп ®Ў« бвЁ ®ЎкҐЄв®ў а бб¬ ваЁў ов ЈҐ®¬ҐваЁзҐбЄЁҐ
  е а ЄвҐаЁбвЁЄЁ ®вᥪ Ґ¬ле ®ЎкҐЄв®ў Ё ЇаҐ®Ўа §гов Ёе ў 楫м­лҐ ®ЎкҐЄвл,
  Є®в®алҐ ­Ґ ­ ¤® ࠧ१ вм. ќвЁ ­®ўлҐ ®ЎкҐЄвл § вҐ¬ ЇҐаҐ¤ овбп ў бзҐв­го
  з бвм Їа®Ја ¬¬л Ё аЁбговбп ЎҐ§®в­®бЁвҐ«м­® Є з бвп¬, Є®в®алҐ ®Є § «Ёбм § 
  ЇаҐ¤Ґ« ¬Ё ®вᥪ Ґ¬®© ®Ў« бвЁ. ‘«®¦­®бвм б  «Ј®аЁв¬ ¬Ё ®Ў« бвЁ ®ЎкҐЄв®ў
  б®бв®Ёв ў ⮬, зв® Ёе ॠ«Ё§ жЁп ¤®ў®«м­® б«®¦­  Ё § ўЁбЁв ®в вЁЇ®ў
  аЁб㥬ле ®ЎкҐЄв®ў. ЋвбҐзҐ­Ёп Їа®бвле «Ё­Ё© Ё§ ®Ў« бвЁ ®ЎкҐЄв®ў ­Ґ в Є
  б«®¦­®, Ј®а §¤® б«®¦­ҐҐ ЇаЁ¤г¬ вм нд䥪⨢­лҐ  «Ј®аЁв¬л ¤«п б«®¦­ле
  ®ЎкҐЄв®ў, б®бв®пйЁе Ё§ ¬­®Ј®гЈ®«м­ЁЄ®ў.
  Љ бз бвмо ¤«п ­ б, ­ ЁЎ®«ҐҐ б«®¦­л© ®Ўа §, Є®в®ал© ­ ¬ ЇаЁ¤Ґвбп ࠧ१ вм,
  нв® ЎЁв®ўл© ®Ўа § (¬л г§­ Ґ¬ ® ⮬, Є Є б ­Ё¬ а Ў®в вм, ў Ј« ўҐ 7-®©,
  "Џа®¤ўЁ­гв п ЎЁв®ў п Ја дЁЄ  Ё бЇҐжнд䥪вл"). Њл Ўг¤Ґ¬ бв६Ёвмбп
  ЁбЇ®«м§®ў вм нвЁ  «Ј®аЁв¬л ўбҐЈ¤ , Є®Ј¤  нв® в®«мЄ® ў®§¬®¦­®, Ї®бЄ®«мЄг ®­Ё
  ¤ ов ¬ ЄбЁ¬ «м­го бЄ®а®бвм. Њл ­Ґ ¬®¦Ґ¬ ᥡҐ Ї®§ў®«Ёвм ¤®Ў ў«пвм ў ­ иЁ
  дг­ЄжЁЁ ўлў®¤  в®зҐЄ ўбҐў®§¬®¦­лҐ Їа®ўҐаЄЁ, Ї®Є  нв® ­Ґ пў«пҐвбп  Ўб®«ов­®©
  ­Ґ®Ўе®¤Ё¬®бвмо.
                               - 103 -
  —в®Ўл 㢥७­® згўбвў®ў вм бҐЎп ў ¤ўг嬥୮¬ ¬ЁаҐ, ¤ ў ©вҐ Ї®Ј®ў®аЁ¬ ­ 
  ⥬г, Є®в®аго Ў®«миЁ­бвў® «о¤Ґ© Ї®зҐ¬г-в® ­Ґ «оЎЁв. ђҐзм Ї®©¤Ґв ® ¬ ваЁж е.



        Њ Ђ ’ ђ € – ›

  Њ ваЁжл ­Ґ ®зҐ­м б«®¦­л ¤«п Ї®­Ё¬ ­Ёп Ё ЁбЇ®«м§®ў ­Ёп. Ѓ®«ҐҐ в®Ј®, ®­Ё
  ­г¦­л ¤«п ­ ЇЁб ­Ёп Ўлбвале ЇаҐ®Ўа §®ў ­Ё© Ё ®зҐ­м Ї®«Ґ§­л ¤«п
  ЇаҐ¤бв ў«Ґ­Ёп ¬ вҐ¬ вЁзҐбЄЁе ®ЇҐа жЁ© ў Є®¬Ї Єв­®© д®а¬Ґ.
  Њ ваЁж  - нв® ¬­®¦Ґбвў® зЁбҐ«, бЈагЇЇЁа®ў ­­ле ў Є®«®­ЄЁ Ё бв®«Ўжл. ‡¤Ґбм
  Ё§®Ўа ¦Ґ­л 2 ¬ ваЁжл: Њ ваЁж  Ђ Ё Њ ваЁж  ‚.
       і1   0   2і                    і3   5  -1і
  Ђ =  і         і               ‚ =  і2   7   0і 
       і3  -1   4і                    і4   3   3і

     ђ §¬Ґа­®бвм 2е3                ђ §¬Ґа­®бвм 3е3

     Њ ваЁж  Ђ - нв® ¬ ваЁж  2е3 (в® Ґбвм г ­ҐҐ ¤ўҐ бва®ЄЁ Ё ваЁ бв®«Ўж ),
     в®Ј¤  Є Є ¬ ваЁж  ‚ - нв® ¬ ваЁж  3е3. Њл ¬®¦Ґ¬ Ї®«гзЁвм ¤®бвгЇ Є
     н«Ґ¬Ґ­вг ¬ ваЁжл Ђ, ЁбЇ®«м§гп § ЇЁбм A[m,n], Ј¤Ґ m - нв® бва®Є ,   n -
     бв®«ЎҐж. ќ«Ґ¬Ґ­в ў «Ґў®¬ ўҐае­Ґ¬ гЈ«г ¬ ваЁжл Ђ Ўг¤Ґв ®Ў®§­ з вмбп
     A[0,0] Ё ®­ а ўҐ­ Ґ¤Ё­ЁжҐ.

     Џа®Ё§ўҐ¤Ґ­ЁҐ ®ЇҐа жЁ© ­ ¤ ¬ ваЁж ¬Ё
   -------------------------------------------        

  ‚л ¬®¦ҐвҐ Їа®Ё§ў®¤Ёвм Ў®«миЁ­бвў® ®ЇҐа жЁ© ­ ¤ ¬ ваЁж ¬Ё в Є ¦Ґ, Є Є ўл
  ®ЇҐаЁагҐвҐ Ё б ­®а¬ «м­л¬Ё зЁб« ¬Ё. Ќ ЇаЁ¬Ґа, ўл ¬®¦ҐвҐ Ёе бЄ« ¤лў вм Ё«Ё
  ўлзЁв вм, ᮮ⢥вб⢥­­® бЄ« ¤лў п Ё«Ё ўлзЁв п Є ¦¤л© Ё§ Є®¬Ї®­Ґ­в®ў.
  „«п ЇаЁ¬Ґа  а бᬮваЁ¬ б«®¦Ґ­ЁҐ ¤ўге ¬ ваЁж а §¬Ґа­®бвмо 2е3 - ¬ ваЁжл Ђ Ё
  ¬ ваЁжл ‘:
      і1   0   2і                    і3   5  -1і
  A = і         і                C = і         і
      і3  -1   4і                    і2   7   0і

  ЏаЁ б«®¦Ґ­ЁЁ ¬ ваЁж Ђ Ё ‘ ­г¦­® бЄ« ¤лў вм Є ¦¤л© Ё§ н«Ґ¬Ґ­в®ў m,n. C㬬л
  н«Ґ¬Ґ­в®ў § ©¬гв ў १г«мвЁаго饩 ¬ ваЁжҐ ᮮ⢥вбвўгойЁҐ ¬Ґбв :
          і1   0   2і     і3   5  -1і     і4   5   1і
  A + C = і         і  +  і         і  =  і         і
          і3  -1   4і     і2   7   0і     і5   6   4і

  Њл в Є¦Ґ ¬®¦Ґ¬ г¬­®¦Ёвм ¬ ваЁжг ­  бЄ «па k. Ќ ЇаЁ¬Ґа, зв®Ўл г¬­®¦Ёвм 
  ¬ ваЁжг Ђ ­  3, ¬л ¤®«¦­л г¬­®¦Ёвм ­  3 Є ¦¤л© ҐҐ  н«Ґ¬Ґ­в:
                                 - 104 -
                і1   0   2і       і3   0   6і
  3 x A = 3  x  і         і   =   і         і  
                і3  -1   4і       і9  -3  12і


  ’ҐЇҐам Ї®Ј®ў®аЁ¬ ®Ў г¬­®¦Ґ­ЁЁ ¤ўге ¬ ваЁж. ќв  ®ЇҐа жЁп ­Ґ¬­®Ј® ®в«Ёз Ґвбп
  ®в г¬­®¦Ґ­Ёп ­Ґ бЄ «па­го ўҐ«ЁзЁ­г. ‚л ¤®«¦­л § Ї®¬­Ёвм ­ҐбЄ®«мЄ® Їа ўЁ«:
    - Љ®«ЁзҐбвў® бв®«Ўж®ў ў 1-© ¬ ваЁжҐ (n) ¤®«¦­® Ўлвм а ў­® Є®«ЁзҐбвўг
      бва®Є ў® ўв®а®© (в Є¦Ґ n). ќв® §­ зЁв, зв® Ґб«Ё а §¬Ґа­®бвм ЇҐаў®©
      ¬ ваЁжл (mxn), в® а §¬Ґа­®бвм ўв®а®© ¬ ваЁжл ¤®«¦­  Ўлвм (nxr). „ў 
      ®бв «м­ле Ё§¬ҐаҐ­Ёп m Ё r ¬®Јгв Ўлвм «оЎл¬Ё;
    - Џа®Ё§ўҐ¤Ґ­ЁҐ ¬ ваЁж ­Ґ Є®¬¬гв вЁў­®, в® Ґбвм A x B ­Ґ а ў­® B x A.

  “¬­®¦Ґ­ЁҐ ¬ ваЁжл mxn ­  ¬ ваЁжг nxr ¬®¦Ґв Ўлвм ®ЇЁб ­®  «Ј®аЁв¬ЁзҐбЄЁ
  б«Ґ¤гойЁ¬ ®Ўа §®¬:
     1. „«п Є ¦¤®© бва®ЄЁ ЇҐаў®© ¬ ваЁжл: 
     “¬­®¦Ёвм бва®Єг ­  бв®«ЎҐж ¤агЈ®© ¬ ваЁжл Ї®н«Ґ¬Ґ­в­®. ‘«®¦Ёвм
     Ї®«г祭­л© १г«мв в;

     2. Џ®¬ҐбвЁвм १г«мв в ў Ї®§ЁжЁо [i,j] १г«мвЁаго饩 ¬ ваЁжл, Ј¤Ґ i -
     нв® бва®Є  ЇҐаў®© ¬ ваЁжл,   j - бв®«ЎҐж ўв®а®© ¬ ваЁжл.

     „«п Їа®бв®вл Ї®б¬®ваЁ¬ ­  аЁб.4.9:
                           _ 
     і 1  2  4 і   і4  1  і4і  3 і           і Џ  Џ  Џ  Џ і
     і _______ і е і      і і    і    =      і Џ  Џ 26  Џ і
     іі2  6  0іі   і0 -1  і3і  1 і           і      --    і
       -------     і      і і    і
                   і2  7  і5і  2 і
                           -
         2е3            3е4                      2е4


                  [2*4] + [6*3] + [0*5] = 26


      _________                   _
     іі1  2  4іі     і4   1   4  і3і і           і Џ  Џ  Џ 13 і
     і ------- і  x  і           і і і     =     і            і
     і 2  6  0 і     і0  -1   3  і1і і           і Џ  Џ 26  Џ і
                     і           і і і
                     і2   7   5  і2і і
                                  -   
          2е3             3е4                         2е4


                  [1*3] + [2*1] + [4*2] = 13

                  ђЁб.4.9. ђҐ§г«мв в ¬ ваЁз­®Ј® Їа®Ё§ўҐ¤Ґ­Ёп.


  Њл ¬®¦Ґ¬ н⮠ᤥ« вм ­ ¬­®Ј® Їа®йҐ, ­ ЇЁб ў Їа®Ја ¬¬г ­  ‘Ё. „ ў ©вҐ
  ®ЇаҐ¤Ґ«Ё¬ ¬ ваЁжг 3е3 Ё ­ ЇЁиҐ¬ дг­ЄжЁо, г¬­®¦ ойго ¬ ваЁжл. ‚ ‹ЁбвЁ­ЈҐ 4.9
  Ї®Є § ­  ᮮ⢥вбвўгой п Їа®Ја ¬¬ .                                    
                                - 105 -
  ‹ЁбвЁ­Ј 4.9. ЋЇаҐ¤Ґ«Ґ­ЁҐ Ё г¬­®¦Ґ­ЁҐ ¤ўге ¬ ваЁж.
  -------------------------------------------------------------------------
  // ®Ўй п бвагЄвга  ¬ ваЁжл
  typedef struct matrix_typ
             {
             float elem[3][3];  // ¬Ґбв® ¤«п еа ­Ґ­Ёп ¬ ваЁжл
             } matrix, *matrix_ptr;
  void Mat_Mult3X3(matrix_ptr matrix_1,matrix_ptr matrix_2,
                   matrix_ptr result)
  {
  index i,j,k;
  for(i=0; i<3; i++)
     {
     for (j=0; j<3; j++)
        {
            result[i][j] = 0;  // Ё­ЁжЁ «Ё§ жЁп н«Ґ¬Ґ­в 
                for(k=0; k<3; k++)
                  {
                        result->elem[i][j]+=matrix_1->elem[i][k]
                                 * matrix_2->elem[k][j];
                 }  // Є®­Ґж жЁЄ«  Ї® k
         }  // Є®­Ґж жЁЄ«  Ї® j
    } // Є®­Ґж жЁЄ«  Ї® i
  } // Є®­Ґж дг­ЄжЁЁ
_________________________________________________________________________

ЏҐаҐ¤ ўл室®¬ Ё§ нв®© дг­ЄжЁЁ ¬л Ё¬ҐҐ¬ १г«мв в, б®еа ­Ґ­­л© ў ЇҐаҐ¬Ґ­­®©
result.

                                                                                       
    …¤Ё­Ёз­ п ¬ ваЁж 
 ------------------------
 
ЏаҐ¦¤Ґ 祬 § Є®­зЁвм Ј®ў®аЁвм ® ¬ ваЁж е, бЄ ¦Ґ¬ ҐйҐ ®Ў ®¤­®© ўҐйЁ: ®
Ґ¤Ё­Ёз­®© ¬ ваЁжҐ. ЌҐ гЈ«гЎ«ппбм ў ¬ вҐ¬ вЁзҐбЄЁҐ вҐа¬Ё­л, п е®зг бЄ § вм,
зв® ­ ¬ ­г¦­  в Є п ¬ ваЁж , г¬­®¦ п ­  Є®в®аго ¬л Ї®«гз «Ё Ўл Ёб室­го
¬ ваЁжг.
ѓ®ў®ап Ї®Їа®бвг, ­ ¬ ­г¦­® Ё¬Ґвм ¬ ваЁжг а §¬Ґа­®бвмо mxn, Є®в®аго ­ §®ўҐ¬
¬ ваЁжҐ© I. “¬­®¦ п ­  ­ҐҐ «оЎго ¤агЈго ¬ ваЁжг, ¬л ¤®«¦­л Ї®«гзЁвм
Ёб室­го. ќв®© ¬ ваЁжҐ© Ўг¤Ґв Єў ¤а в­ п ¬ ваЁж , Ї® Ј« ў­®© ¤Ё Ј®­ «Ё
Є®в®а®© § ЇЁб ­л Ґ¤Ё­Ёжл,   ўбҐ ®бв «м­лҐ н«Ґ¬Ґ­вл а ў­л ­г«о:
                
               і1  0  0 і
    I    =     і0  1  0 і
               і0  0  1 і
               
 …б«Ё ¬л г¬­®¦Ё¬ ¬ ваЁжг A ­  ¬ ваЁжг I,
                             - 106 -
                             
          і1   0   2і               і1  0  0і
  A   =   і3  -1   4і      I   =    і0  1  0і       
          і6  -2   0і               і0  0  1і

⮠१г«мв в®¬ Ўг¤Ґв Ёб室­ п ¬ ваЁж  A:

A  x  I  =  A



€‘ЏЋ‹њ‡Ћ‚ЂЌ€… ЊЂ’ђ€– ‚ €ѓђЂ•

Њл 㦥 ¤®бв в®з­® Ї®Ј®ў®аЁ«Ё ® ¬ ваЁж е. ’ҐЇҐам Ї®б¬®ваЁ¬, § зҐ¬ ®­Ё ­ ¬
­г¦­л Ё Є Є Ёе ЁбЇ®«м§®ў вм ў ЁЈа е. ‚ Їа®Ја ¬¬Ґ Ё§ ‹ЁбвЁ­Ј  4.8 ¬л ᮧ¤ «Ё
Ї®«Ґ  бвҐа®Ё¤®ў, Є®в®алҐ ЇҐаҐ¬Ґй «Ёбм, Ё§¬Ґ­п«Ё бў®© а §¬Ґа Ё ўа й «Ёбм.
…б«Ё ¬л ЇаҐ¤бв ўЁ¬ ­ иЁ ®ЎкҐЄвл Є Є ­ Ў®а ¬ ваЁж, ⮠ᬮ¦Ґ¬ ЁбЇ®«м§®ў вм
г¬­®¦Ґ­ЁҐ ¬ ваЁж ¤«п Ёе ва ­бд®а¬ жЁЁ.
ЏаҐ«Ґбвм ¬ ваЁж б®бв®Ёв ў ⮬, зв® ўл ¬®¦ҐвҐ ®ЎкҐ¤Ё­Ёвм ўбҐ ®ЇҐа жЁЁ ў ®¤­г
¬ ваЁжг, ®ЇЁблў ойго ЇҐаҐ¬ҐйҐ­ЁҐ, ¬ бив ЎЁа®ў ­ЁҐ Ё ўа йҐ­ЁҐ.
Џ®¬­ЁвҐ, Є®Ј¤  ЇЁигвбп ўЁ¤Ґ®ЁЈал, ¬л ¤®«¦­л ЁбЄ вм ­ ЁЎ®«ҐҐ Ўлбвал© Ё
нд䥪⨢­л©  «Ј®аЁв¬. —Ґ¬ Ў®«мйҐ еЁва®б⥩ Ё ваоЄ®ў г ­ б ў § Ї бҐ, ⥬
«гзиҐ. ’ҐЇҐам Ї®б¬®ваЁ¬ ­  ¬ ваЁжл ¤«п ЇҐаҐ¬ҐйҐ­Ёп, ¬ бив ЎЁа®ў ­Ёп Ё
ўа йҐ­Ёп.

    ѓ« ў­ п ¬ ваЁж  ЇҐаҐ¬ҐйҐ­Ё©
----------------------------------
ѓ« ў­®© ¬ ваЁжҐ© ЇҐаҐ¬ҐйҐ­Ё© Ўг¤Ґ¬ ­ §лў вм в Єго ¬ ваЁжг, ў Є®в®а®©
x_translation Ё y_translation - нв® Є®нддЁжЁҐ­вл ЇҐаҐ¬ҐйҐ­Ёп ®ЎкҐЄв  Ї®
®бп¬ X Ё Y. ‚®в Є Є ®­  ўлЈ«п¤Ёв:
і                               і
і1              0              0і
і0              1              0і
іx_translation  y_translation  1і
і                               і


    ѓ« ў­ п ¬ ваЁж  ¬ бив ЎЁа®ў ­Ёп
--------------------------------------
ѓ« ў­ п ¬ ваЁж  ¬ бив ЎЁа®ў ­Ёп - нв® в Є п ¬ ваЁж , ў Є®в®а®© scale_x Ё
scale_y - нв® Є®нддЁжЁҐ­вл ¬ бив ЎЁа®ў ­Ёп ®ЎкҐЄв  Ї® Є®®а¤Ё­ в ¬ x Ё y:

іscale_x   0         0і
і0         scale_y   0і
і0         0         1і

’ Є п ¬ ваЁж  Ї®§ў®«пҐв ўлЇ®«­пвм ­Ґ®¤­®а®¤­®Ґ ¬ бив ЎЁа®ў ­ЁҐ - ¬л ¬®¦Ґ¬ 
§ ¤ вм ®¤Ё­ ¬ бив Ў Ї® ®бЁ X Ё ¤агЈ®© - Ї® ®бЁ Y. ’ ЄЁ¬ ®Ўа §®¬, Ґб«Ё ¬л
е®вЁ¬ ¬ бив ЎЁа®ў вм ®ЎкҐЄв ®¤­®а®¤­®, в® ¤®«¦­л § ¤ вм scale_x = scale_y.

                              - 107 -
     ѓ« ў­ п ¬ ваЁж  Ї®ў®а®в®ў
 -------------------------------
 ‚ Ј« ў­®© ¬ ваЁжҐ Ї®ў®а®в®ў angle - нв® гЈ®«, ­  Є®в®ал© ўл е®вЁвҐ
 Ї®ўҐа­гвм ®ЎкҐЄв:
  іcos(angle)  -sin(angle)  0і 
  іsin(angle)  cos(angle)   0і
  і0           0            1і
  
  
    ЋЎй п ¬ ваЁж  ¬ бив ЎЁа®ў ­Ёп, Ї®ў®а®в®ў Ё ЇҐаҐ¬ҐйҐ­Ё©
  ----------------------------------------------------------
Ќ бвгЇ Ґв в®а¦Ґб⢥­­л© ¬®¬Ґ­в. ’ҐЇҐам ¬л ў®§м¬Ґ¬ ¬ ваЁжл ЇҐаҐ¬ҐйҐ­Ёп,
¬ бив ЎЁа®ў ­Ёп Ё Ї®ў®а®в  Ё ЇҐаҐ¬­®¦Ё¬ Ёе (Ї®«гзЁ¬ Ёе Є®­Є вҐ­ жЁо), зв®Ўл
Ї®«гзЁвм ®Ўйго ¬ ваЁжг, ॠ«Ё§гойго ўбҐ ваЁ дг­ЄжЁЁ ба §г. ЋЄ®­з вҐ«м­®
¬ ваЁж  Ўг¤Ґа ўлЈ«п¤Ґвм в Є:

іscale_x x cos(angle)   scale_x x -sin(angle)     0і
іscale_y x sin(angle)   scale_y x cos(angle)      0і
іx_translation          y_translation             1і

…б«Ё ўл ⥯Ґам г¬­®¦ЁвҐ ўҐаиЁ­л ®ЎкҐЄв  ­  нвг ¬ ваЁжг, в® Ї®«гзЁвҐ
ЇҐаҐ¬ҐйҐ­­л©, Ї®ўҐа­гвл© Ё ¬ бив ЎЁа®ў ­­л© ®ЎкҐЄв. ЌҐ б« Ў®,  ?

    Љ®¬Ї®­Ґ­в ­®а¬ «Ё§ жЁЁ ўҐаиЁ­л
 ------------------------------------
џ ᮢᥬ гЇгбвЁ« ®¤­г ¬ «Ґ­мЄго ¤Ґв «м, Є®в®аго ўл 㦥, ­ ўҐа­®Ґ, § ¬ҐвЁ«Ё.
"Љ Є ¬л ¬®¦Ґ¬ г¬­®¦Ёвм ўҐаиЁ­г ­  ¬ ваЁжг а §¬Ґа®¬ 3е3?" ЌҐЇ«®е®© ў®Їа®б.
ђ ¤, зв® ўл бЇа®бЁ«Ё. —в®Ўл ўлЇ®«­Ёвм нв®, ¬л ¤®«¦­л Ё§¬Ґ­Ёвм ЇаҐ¤бв ў«Ґ­ЁҐ
бвагЄвгал ўҐаиЁ­, ¤®Ў ўЁў Є®¬Ї®­Ґ­в ­®а¬ «Ё§ жЁЁ. Љ®¬Ї®­Ґ­в ­®а¬ «Ё§ жЁЁ -
нв® Їа®бв® Ґ¤Ё­Ёж , ¤®Ў ў«Ґ­­ п ў Є®­Ґж бвагЄвгал, ®ЇЁблў о饩 Є ¦¤го
ўҐаиЁ­г. „«п нв®Ј® ­ ¬ ­ ¤® згвм-згвм Ё§¬Ґ­Ёвм Ёб室­лҐ ⥪бвл ў ‹ЁбвЁ­ЈҐ
4.4, ў Є®в®а®¬ ®ЇЁб ­л ўҐаиЁ­л. ‚ᥠнв® ®ва ¦Ґ­® ў бвагЄвгॠ¤ ­­ле ў
‹ЁбвЁ­ЈҐ 4.10.

‹ЁбвЁ­Ј 4.10. Ќ®ў п бвагЄвга  ¤ ­­ле ¤«п ўҐаиЁ­.
------------------------------------------------------------------------
#define X_COMP 0
#define Y_COMP 1
#define N_COMP 2

typedef struct vertex_typ
           {
           float p[3];
           } vertex, *vertex_ptr;
__________________________________________________________________________
                         - 108 -
Љ Є ўл ¬®¦ҐвҐ § ¬ҐвЁвм, ⥯Ґам ¬л ЇаҐўа вЁ«Ё ¬ ваЁжг P, ®ЇЁблў ойго
ўҐаиЁ­г, ў ¬ ббЁў. Ќ и  ¬ ваЁж  ЇаҐ®Ўа §®ў ­Ё© Ё¬ҐҐв а §¬Ґа 3е3, Ё ¤«п
г¬­®¦Ґ­Ёп ­ ¬ ­ ¤® Ё¬Ґвм ¬ ваЁжг а §¬Ґа®¬ 1е3. Њ ваЁж  P 㤮ў«Ґвў®апҐв
н⮬г гб«®ўЁо.

    Џа®Ја ¬¬  ЂбвҐа®Ё¤л б ЁбЇ®«м§®ў ­ЁҐ¬ ¬ ваЁж
 ---------------------------------------------------
џ 㦥 гбв « ®в а §Ј®ў®а®ў - ¤ ў ©вҐ зв®-­ЁЎг¤м ­ ЇЁиҐ¬. Љ ЇаЁ¬Ґаг,
ЇҐаҐЇЁиҐ¬ ­ иг Їа®Ја ¬¬г Ё§ ‹ЁбвЁ­Ј  4.8. ‚л ¤®«¦­л ҐҐ Ї®¬­Ёвм. Њл ҐҐ
ЇҐаҐ¤Ґ« Ґ¬ Ё ЁбЇ®«м§гҐ¬ ў ­Ґ© ¬ ваЁжл. ‹ЁбвЁ­Ј 4.11 Ї®Є §лў Ґв нвг
Їа®Ја ¬¬г. Ћ­  ­ §лў Ґвбп "‘гЇҐа ЂбвҐа®Ё¤л".                

‹ЁбвЁ­Ј 4.11. ‘гЇҐа ЂбвҐа®Ё¤л (FIELD_DL.C).
-------------------------------------------------------------------------                            

// I N C L U D E S ///////////////////////////////////////////////////////////

#include <stdio.h> // include the basics
#include <graph.h> // include Microsofts Graphics Header
#include <math.h>  // include math stuff

// D E F I N E S   ///////////////////////////////////////////////////////////

#define NUM_ASTEROIDS 10
#define ERASE 0
#define DRAW  1

#define X_COMP 0
#define Y_COMP  1
#define N_COMP 2


// T Y P E D E F S ///////////////////////////////////////////////////////////

// new and improved vertex

typedef struct vertex_typ
           {
           float p[3];  // a single point in the 2-D plane with normalizing factor
           } vertex, *vertex_ptr;

// a general matrix structure

typedef struct matrix_typ
           {
           float elem[3][3];  // storage for a 3x3 martrix
           } matrix, *matrix_ptr;


// the structure for an object

typedef struct object_typ
           {
           int num_vertices;     // number of vertices in this object
           int color;            // color of object
           float xo,yo;          // position of object
           float x_velocity;     // x velocity of object
           float y_velocity;     // y velocity of object
           matrix scale;         // the object scaling matrix
           matrix rotation;      // the objects rotation and translation matrix

           vertex vertices[16];  // 16 vertices
           } object, *object_ptr;


// G L O B A L S /////////////////////////////////////////////////////////////


object asteroids[NUM_ASTEROIDS];


// F U N C T I O N S /////////////////////////////////////////////////////////

void Delay(int t)
{

// take up some compute cycles

float x = 1;

while(t-->0)
     x=cos(x);


} // end Delay

//////////////////////////////////////////////////////////////////////////////

void Make_Identity(matrix_ptr i)
{

// makes the sent matrix into an identity matrix

i->elem[0][0] = i->elem[1][1] = i->elem[2][2] = 1;
i->elem[0][1] = i->elem[1][0] = i->elem[1][2] = 0;
i->elem[2][0] = i->elem[0][2] = i->elem[2][1] = 0;


} // end Make_Identity

//////////////////////////////////////////////////////////////////////////////

void Clear_Matrix(matrix_ptr m)
{

// zeros out the sent matrix

m->elem[0][0] = m->elem[1][1] = m->elem[2][2] = 0;
m->elem[0][1] = m->elem[1][0] = m->elem[1][2] = 0;
m->elem[2][0] = m->elem[0][2] = m->elem[2][1] = 0;


} // end Clear_Matrix

//////////////////////////////////////////////////////////////////////////////


void Mat_Mul(vertex_ptr v,matrix_ptr m)
{

// do a multiplication of a 1x3 * 3x3 the result is again a 1x3
// for speed manually do the multiplication by specifying each multiplication
// and addition manually (apprentice trick)

float x_new, y_new;

x_new = v->p[0]*m->elem[0][0] + v->p[1]*m->elem[1][0] + m->elem[2][0];
y_new = v->p[0]*m->elem[0][1] + v->p[1]*m->elem[1][1] + m->elem[2][1];

v->p[X_COMP] = x_new;
v->p[Y_COMP] = y_new;

// note we need not change N_COMP since it is always 1

} // end Mat_Mul

//////////////////////////////////////////////////////////////////////////////


void Scale_Object_Mat(object_ptr obj)
{

int index;

// scale the object, just multiply each point in the object by it's scaling
// matrix

for (index=0; index<obj->num_vertices; index++)
    {

    Mat_Mul((vertex_ptr)&obj->vertices[index],(matrix_ptr)&obj->scale);

    } // end for index

} // end Scale_Oject_Mat


//////////////////////////////////////////////////////////////////////////////

Rotate_Object_Mat(object_ptr obj)
{

int index;

// rotate the object, just multiply each point in the object by it's rotation
// matrix

for (index=0; index<obj->num_vertices; index++)
    {

    Mat_Mul((vertex_ptr)&obj->vertices[index],(matrix_ptr)&obj->rotation);

    } // end for index

} // end Rotate_Oject_Mat


//////////////////////////////////////////////////////////////////////////////

void Create_Field(void)
{

int index;
float angle,c,s;

// this function creates the asteroid field

for (index=0; index<NUM_ASTEROIDS; index++)
    {

    // fill in the fields

    asteroids[index].num_vertices = 6;
    asteroids[index].color = 1  + rand() % 14; // always visable
    asteroids[index].xo    = 41 + rand() % 599;
    asteroids[index].yo    = 41 + rand() % 439;
    asteroids[index].x_velocity = -10 + rand() % 20;
    asteroids[index].y_velocity = -10 + rand() % 20;

    // clear out matrix

    Make_Identity((matrix_ptr)&asteroids[index].rotation);

    // now setup up rotation  matrix

    angle = (float)(- 50 + (float)(rand() % 100)) / 100;

    c=cos(angle);
    s=sin(angle);

    asteroids[index].rotation.elem[0][0] = c;
    asteroids[index].rotation.elem[0][1] = -s;
    asteroids[index].rotation.elem[1][0] = s;
    asteroids[index].rotation.elem[1][1] = c;

    // set up scaling  matrix

    // clear out matrix

    Make_Identity((matrix_ptr)&asteroids[index].scale);

    asteroids[index].scale.elem[0][0] = (float)(rand() % 30) / 10;
    asteroids[index].scale.elem[1][1] = asteroids[index].scale.elem[0][0];


    asteroids[index].vertices[0].p[X_COMP] = 4.0;
    asteroids[index].vertices[0].p[Y_COMP] = 3.5;
    asteroids[index].vertices[0].p[N_COMP] = 1;

    asteroids[index].vertices[1].p[X_COMP] = 8.5;
    asteroids[index].vertices[1].p[Y_COMP] = -3.0;
    asteroids[index].vertices[1].p[N_COMP] = 1;

    asteroids[index].vertices[2].p[X_COMP] = 6;
    asteroids[index].vertices[2].p[Y_COMP] = -5;
    asteroids[index].vertices[2].p[N_COMP] = 1;

    asteroids[index].vertices[3].p[X_COMP] = 2;
    asteroids[index].vertices[3].p[Y_COMP] = -3;
    asteroids[index].vertices[3].p[N_COMP] = 1;

    asteroids[index].vertices[4].p[X_COMP] = -4;
    asteroids[index].vertices[4].p[Y_COMP] = -6;
    asteroids[index].vertices[4].p[N_COMP] = 1;

    asteroids[index].vertices[5].p[X_COMP] = -3.5;
    asteroids[index].vertices[5].p[Y_COMP] = 5.5;
    asteroids[index].vertices[5].p[N_COMP] = 1;

    // now scale the asteroid to proper size

    Scale_Object_Mat((object_ptr)&asteroids[index]);

    } // end for index

} // end Create_Field

//////////////////////////////////////////////////////////////////////////////

void Draw_Asteroids(int erase)
{

int index,vertex;
float xo,yo;

// this function draws the asteroids or erases them depending on the sent flag

for (index=0; index<NUM_ASTEROIDS; index++)
    {

    // draw the asteroid

    if (erase==ERASE)
       _setcolor(0);
    else
       _setcolor(asteroids[index].color);

    // get position of object
    xo = asteroids[index].xo;
    yo = asteroids[index].yo;


    // moveto first vertex

    _moveto((int)(xo+asteroids[index].vertices[0].p[X_COMP]),
            (int)(yo+asteroids[index].vertices[0].p[Y_COMP]));

    for (vertex=1; vertex<asteroids[index].num_vertices; vertex++)
        {
        _lineto((int)(xo+asteroids[index].vertices[vertex].p[X_COMP]),
                (int)(yo+asteroids[index].vertices[vertex].p[Y_COMP]));

        } // end for vertex

    // close object

    _lineto((int)(xo+asteroids[index].vertices[0].p[X_COMP]),
            (int)(yo+asteroids[index].vertices[0].p[Y_COMP]));


    } // end for index

} // end Draw_Asteroids

//////////////////////////////////////////////////////////////////////////////

void Translate_Asteroids(void)
{

int index;

// this function moves the asteroids

for (index=0; index<NUM_ASTEROIDS; index++)
    {
    // translate current asteroid

    asteroids[index].xo += asteroids[index].x_velocity;
    asteroids[index].yo += asteroids[index].y_velocity;

    // collision detection i.e. bounds check

    if (asteroids[index].xo > 600 || asteroids[index].xo < 40)
        {
        asteroids[index].x_velocity = -asteroids[index].x_velocity;
        asteroids[index].xo += asteroids[index].x_velocity;
        }

    if (asteroids[index].yo > 440 || asteroids[index].yo < 40)
        {
        asteroids[index].y_velocity = -asteroids[index].y_velocity;
        asteroids[index].yo += asteroids[index].y_velocity;
        }

    } // end for index

} // end Translate_Asteroids

//////////////////////////////////////////////////////////////////////////////

void Rotate_Asteroids()
{

int index;

for (index=0; index<NUM_ASTEROIDS; index++)
    {
    // rotate current asteroid
    Rotate_Object_Mat((object_ptr)&asteroids[index]);

    } // end for index

} // end Rotate_Asteroids


//////////////////////////////////////////////////////////////////////////////

void main(void)
{

// put the computer into graphics mode
_setvideomode(_VRES16COLOR); //  640x480 in 16 colors

// initialize
Create_Field();

while(!kbhit())
     {
     // erase field

     Draw_Asteroids(ERASE);

     // transform field

     Rotate_Asteroids();

     Translate_Asteroids();

     // draw field

     Draw_Asteroids(DRAW);

     // wait a bit since we aren't syncing or double buffering...nuff said

     Delay(500);


     } // end while

// place the computer back into text mode

_setvideomode(_DEFAULTMODE);

} // end main
________________________________________________________________________
                             - 115 -
‚ ¬ Ї®вॡгҐвбп ўаҐ¬п, зв®Ўл Ё§гзЁвм нвг Їа®Ја ¬¬г. “¤Ґ«ЁвҐ ў­Ё¬ ­ЁҐ 
бЇ®б®Ўг, Є®в®ал¬  бвҐа®Ё¤л ¬ бив ЎЁаговбп Ё Ї®ў®а зЁў овбп. …б«Ё ўл
ба ў­ЁвҐ ўаҐ¬п ЁбЇ®«­Ґ­Ёп Їа®Ја ¬¬ Ё§ ‹ЁбвЁ­Ј®ў 4.8 Ё 4.11, в® ­Ґ ­ ©¤ҐвҐ
­ЁЄ Є®© а §­Ёжл. …б«Ё ¦Ґ ўл Ї®ва вЁвҐ ўаҐ¬п Ё Ї®¬ҐбвЁвҐ ўбҐ Ї®ў®а®вл,
¬ бив ЎЁа®ў ­ЁҐ Ё ЇҐаҐ¬ҐйҐ­ЁҐ ў ®¤­г ¬ ваЁжг, в® Їа®Ја ¬¬  Ё§ ‹ЁбвЁ­Ј  4.11
Ўг¤Ґв а Ў®в вм §­ зЁвҐ«м­® Ўлбв॥.
€в Є, г¬­®¦Ґ­ЁҐ ¬ ваЁж ®б®ЎҐ­­® нд䥪⨢­®, Є®Ј¤  ўл Їа®Ё§ў®¤ЁвҐ
¬­®¦Ґб⢥­­лҐ ва ­бд®а¬ жЁЁ ®ЎкҐЄв  б Ї®¬®ймо Ґ¤Ё­®©, § а ­ҐҐ
Ї®¤Ј®в®ў«Ґ­­®© ¬ ваЁжл, ўЄ«оз о饩 ў бҐЎп ўбҐ ®ЇҐа жЁЁ ЇаҐ®Ўа §®ў ­Ёп ­ ¤
нвЁ¬ ®ЎкҐЄв®¬.

Љ ‚Ђ…Њ“ ‘‚…„…Ќ€ћ
‡ Ї®¬­ЁвҐ, зв® ўбҐ нв® ¬л ¤Ґ« Ґ¬ ¤«п в®Ј®, зв®Ўл ­ гзЁвмбп ЇЁб вм
ўЁ¤Ґ®ЁЈал, ®б®ЎҐ­­® ваҐе¬Ґа­лҐ. € ¤Ґ« Ґ¬ ¬л нв® Ї®б⥯Ґ­­®. …б«Ё п ў ¬
ба §г Ї®Є ¦г, Є Є ЇЁб вм ЁЈал вЁЇ  Wjlfenstein 3-D Ё«Ё DOOM, в® ¬л ¬­®Ј®Ґ
Ї®вҐа塞 ў в ЄвЁЄҐ Ё дЁ«®б®дЁЁ а §а Ў®вЄЁ Ё ᮧ¤ ­Ёп ЁЈа.
…б«Ё ¦Ґ ўл ­ бв®пйЁ© а §а Ў®взЁЄ ЁЈа, ⮠㦥 ў ¤ ­­л© ¬®¬Ґ­в ¤®«¦­л ¤г¬ вм
® ⮬, Є Є ЇҐаҐ¤Ґ« вм ⥠Їа®Ја ¬¬л, Є®в®алҐ п ¤ «, ў ­ бв®пйго ЁЈаг. ЌҐ
ЎҐбЇ®Є®©вҐбм! Њ­Ґ Ё ў Ј®«®ўг ­Ґ ЇаЁе®¤Ёв бЄ § вм: "‚ Є зҐб⢥ гЇа ¦­Ґ­Ёп
ЇҐаҐЇЁиЁвҐ Їа®Ја ¬¬г Ё§ ‹ЁбвЁ­Ј  4.11 ў ­ бв®пйго ЁЈаг". Њл ­ ЇЁиҐ¬ ЁЈаг
ў¬ҐбвҐ, ­® згвм Ї®§¦Ґ. ‹гзиҐ Ї®Ј®ў®аЁ¬ ® ⮬, Є ЄЁҐ Ё§¬Ґ­Ґ­Ёп ­ ¬ ­ ¤®
ў­ҐбвЁ, зв®Ўл ЁЈа  Ї®«гзЁ« бм.
…б«Ё ўл е®вЁвҐ г§­ вм, Є  п Ўл ЇҐаҐ¤Ґ«лў « ‹ЁбвЁ­Ј 4.8 ў ­ бв®пйго ЁЈаг, в®
п Ўл ᤥ« « б«Ґ¤го饥:

  1. Ћб­ бвЁ« Їа®Ја ¬¬г ўбҐ¬ ­Ґ®Ўе®¤Ё¬л¬ ¤«п ўлЇ®«­Ґ­Ёп ¬ЁббЁЁ. ‚Ґ¤м ­г¦­®
  Ё¬Ґвм ¬ ­ҐўаҐ­­л© Є®б¬ЁзҐбЄЁ© Є®а Ў«м, ­ҐбЄ®«мЄ® а ЄҐв ¤«п г­Ёз⮦Ґ­Ёп
   бвҐа®Ё¤®ў,   зв®Ўл ЁЈа  ЇаЁ­п«  "в®ў а­л©" ўЁ¤, ­г¦­  бЁб⥬  Ї®¤бзҐв 
  ®зЄ®ў, § бв ўЄ  Ё, Є®­Ґз­®, ў®§¬®¦­®бвм ўл室  Ё§ Їа®Ја ¬¬л. Ља®¬Ґ
  ЇҐаҐзЁб«Ґ­­®Ј® Ї®вॡгҐвбп ᮧ¤ вм бЁб⥬㠮Ї®ўҐйҐ­Ёп ® бв®«Є­®ўҐ­Ёпе б
   бвҐа®Ё¤ ¬Ё (в Є п бЁб⥬  Ўг¤Ґв а бᬮв७  згвм Ї®§¦Ґ, ў нв®© ¦Ґ
  Ј« ўҐ);
  2. „ «ҐҐ п Ї®¤Ј®в®ўЁ« Ўл бў®© Є®а Ў«м. „«п нв®Ј® ®ЇЁб « Ўл ®ЎкҐЄв,
  Є®в®ал© Ї®§ Ё¬бвў®ў «, ­ ЇаЁ¬Ґа, Ё§ ЁЈал Star Trek;
  3. Ќ ЇЁб « Ўл Ї®¤Їа®Ја ¬¬г ¤«п аЁб®ў ­Ёп Ё г­Ёз⮦Ґ­Ёп Є®а Ў«п (вЁЇ 
  дг­ЄжЁЁ Draw_Asteroids Ё§ ‹ЁбвЁ­Ј  4.11);
  4. ђ §а Ў®в « Ўл дг­ЄжЁЁ, Ї®§ў®«пойЁҐ ЁЈа®Єг гЇа ў«пвм Є®а Ў«Ґ¬;
  5. Ќ ЇЁб « Ўл дг­ЄжЁЁ, Є®в®алҐ, ў § ўЁбЁ¬®бвЁ ®в б®бв®п­Ёп Є« ўЁ вгал,
  ўа й «Ё Є®а Ў«м Ї® Ё«Ё Їа®вЁў з б®ў®© бв५ЄЁ. ќв® п ᤥ« « Ўл, Ё§¬Ґ­пп
  ўҐ«ЁзЁ­г angles ў бвагЄвгаҐ, ®ЇЁблў о饩 ®ЎкҐЄв Є®а Ў«п;
                             - 116 -
  6. Џ®в®¬ ¬­Ґ Ї®­ ¤®ЎЁ«бп Ўл бЇ®б®Ў ЇҐаҐ¤ўЁ¦Ґ­Ёп Є®а Ў«п. „«п нв®Ј® п
  Ё§¬Ґ­п« Ўл §­ зҐ­Ёп x_velocity Ё y_velocity ў ᮮ⢥вбвўгойЁе дг­ЄжЁпе:
  
  x_velocity = cos(angle)*speed
  y_velocity = sin(angle)*speed
  
  Ј¤Ґ бЄ®а®бвм Ё§¬Ґ­п« бм Ўл ЇаЁ ­ ¦ вЁЁ ­  ®ЇаҐ¤Ґ«Ґ­­лҐ Є« ўЁиЁ;
  
  7. —в®Ўл ўўҐбвЁ Є®а Ў«м ў ЁЈаг, п Ї®¬ҐбвЁ« Ўл ўл§®ў дг­ЄжЁЁ бвЁа ­Ёп ўбҐе
  Ја дЁзҐбЄЁе ®ЎкҐЄв®ў - Є®а Ў«п Ё  бвҐа®Ё¤®ў - ў ®¤­® Ё в® ¦Ґ ¬Ґбв®. ‡ вҐ¬
  Ї®¬ҐбвЁ« Ўл дг­ЄжЁо ¤ўЁ¦Ґ­Ёп, Є®в®а п ®Їа иЁў Ґв Є« ўЁ вгаг, ў бҐаҐ¤Ё­г
  Їа®Ја ¬¬л (¬Ґ¦¤г ўл§®ў®¬ дг­ЄжЁ© бвЁа ­Ёп Ё аЁб®ў ­Ёп);
  8. ‚ б ¬л© Є®­Ґж жЁЄ«  ўбв ўЁ« Ўл дг­ЄжЁо аЁб®ў ­Ёп Є®а Ў«п.
  
‚®в, б®Ўб⢥­­®, Ё ўбҐ. ‚лЈ«п¤Ёв ­Ґ ®зҐ­м б«®¦­®. Џ®б¬®ваЁ¬, зв® ¤ «миҐ.

    Ћб­®ўл Є®­ва®«п бв®«Є­®ўҐ­Ё©
  -----------------------------------
„ ў ©вҐ § Ўг¤Ґ¬ Їа® ®аг¦ЁҐ Ё Ї®б¬®ваЁ¬, зв® Їа®Ё§®©¤Ґв, Ґб«Ё ­ б § ¤Ґ­Ґв
 бвҐа®Ё¤ (п б«ли «, ®­Ё ®зҐ­м ⢥а¤лҐ). „«п нв®Ј® ­ ¬ ­ ¤® ᮧ¤ вм бЁб⥬г
Є®­ва®«п бв®«Є­®ўҐ­Ё©.                                                                
                                      ®бм Y
                   (-3.5,-5.5)      і
                          Ъ.ДДДДДДДДЕДДДДДДДДДДДДДДДДДДДї
                          і        ДЕД        (4,3.5)   і
                          і        ДЕД       .          і
                          і        ДЕД                  і
                          і        ДЕД                  і
                          і        ДЕД                  і ®бм X
             ДДДДДДДДЕДЕДЕЕЕДЕДЕДЕДДЕДДЕДЕДЕДЕДЕДЕДДДДДДЕД
                          і        ДЕД                  і
                          і        ДЕД                  і
                          і        ДЕД   .            . і(8.5,-3)
                          і        ДЕД                  і
                          і        ДЕД (2,-3)    .      і
                          і.        і        (6,-5)     і
                          АДДДДДДДДДБДДДДДДДДДДДДДДДДДДДЩ
                          (-4,-6)
                          
       ђЁб.4.10. ЋЇЁблў ойЁ© Їаאַ㣮«м­ЁЄ ў®ЄагЈ  бвҐа®Ё¤  ¤«п ўлпў«Ґ­Ёп
                                  бв®«Є­®ўҐ­Ё©.
                                  
                                  - 117 -
ќв® §­ зЁв, зв® ­ ¬ ­ ¤® ᤥ« вм §аЁ¬л¬ б®г¤ аҐ­ЁҐ Є®б¬ЁзҐбЄ®Ј® Є®а Ў«п б
 бвҐа®Ё¤®¬. Џа ўЁ«м­ҐҐ ўбҐЈ® Ўг¤Ґв Ї®бвгЇЁвм в Є:
    1. ‡ Ўлвм ® ॠ«м­ле Ја ­Ёж е  бвҐа®Ё¤  Ё Є®а Ў«п Ё ᮧ¤ вм ўЁавг «м­го
    Ја ­Ёз­го ®Ў« бвм ў®ЄагЈ Є ¦¤®Ј® ®ЎкҐЄв  ЁбЄ«озЁвҐ«м­® ¤«п вҐбв®ўле
    楫Ґ©. ЌҐ ­ ¤® ҐҐ аЁб®ў вм, ¤®бв в®з­®, зв®Ўл ®­  ЇаЁбгвбвў®ў «  ў­гваЁ
    Їа®Ја ¬¬л. ђЁб.4.10 Ї®Є §лў Ґв, зв® п Ё¬Ґо ў ўЁ¤г.
    
    2. …б«Ё ¬л гўЁ¤Ё¬, зв® Ја ­Ёз­ п ®Ў« бвм ­ иҐЈ® бг¤­  ў®и«  ў Ја ­Ёз­го
    ®Ў« бвм  бвҐа®Ё¤ , ¬л ¬®¦Ґ¬ бЄ § вм, зв® ­ и Є®а Ў«м г­Ёз⮦Ґ­. ќв®
    ¤®ў®«м­® Їа®б⮠ᤥ« вм: ¤®бв в®з­® ба ў­Ёвм Є ¦¤го ўҐаиЁ­г ®Ў« бвЁ б
    ўҐаиЁ­®© ¤агЈ®© ®Ў« бвЁ. …б«Ё Ґбвм ўе®¦¤Ґ­ЁҐ, §­ зЁв Їа®Ё§®и«®
    бв®«Є­®ўҐ­ЁҐ.
    
    3. ’ҐЇҐам, Є®Ј¤  бв®«Є­®ўҐ­ЁҐ § дЁЄбЁа®ў ­®, ­г¦­® Їа®Ё§ўҐбвЁ ­  нЄа ­Ґ
    Є Є®©-­ЁЎг¤м Єа б®з­л© нд䥪в: 500-в®­­л© Є®а Ў«м б ¤ўЁЈ вҐ«Ґ¬ ­ 
     ­вЁўҐйҐб⢥ ўаҐ§ Ґвбп ў  бвҐа®Ё¤. Ќ ЇаЁ¬Ґа, ўбЇлиЄЁ б«гз ©­ле в®зҐЄ.
    ќв® Ўг¤Ґв ­ҐЇ«®е® ᬮваҐвмбп.
    
    4. Џ®¤бзҐв ®зЄ®ў Їа®бв: ᮧ¤ ©вҐ ЇҐаҐ¬Ґ­­го score Ё ЇҐз в ©вҐ ҐҐ ­ 
    нЄа ­Ґ Є ¦¤л© а §, Їа®е®¤п зҐаҐ§ Ј« ў­л© жЁЄ«. ‚л ¬®¦ҐвҐ ЁбЇ®«м§®ў вм
    дг­ЄжЁо _outtext() Ё§ ЎЁЎ«Ё®вҐЄЁ ‘Ё.
    
Ља®¬Ґ нв®Ј® ­ ¬ ­ ¤® ­ ЎЁа вм ®зЄЁ. ‡­ зЁв, ­г¦­® Ё¬Ґвм ®аг¦ЁҐ. Ќ ЇаЁ¬Ґа,
Є®а Ў«м ў ЁЈаҐ ¬®¦Ґв ЁбЇ®«м§®ў вм д®в®­­лҐ в®аЇҐ¤л - ¬ «Ґ­мЄЁҐ в®зЄЁ. —в®Ўл
Ёе Ї®«гзЁвм, ­ ¬ ­ ¤®:
   1. Ќ §­ зЁвм ®¤­г Ё§ Є« ўЁи («гзиҐ Џа®ЎҐ«) ¤«п бв५мЎл.
   
   2. Љ®Ј¤  Ўг¤Ґв ®Ў­ а㦥­® ­ ¦ вЁҐ ­  Є« ўЁиг, ®ЇаҐ¤Ґ«Ёвм ­ҐбЄ®«мЄ®
   ЇҐаҐ¬Ґ­­ле, ў Є®в®але § Ї®¬­Ёвм ­ Їа ў«Ґ­ЁҐ ¤ўЁ¦Ґ­Ёп Є®а Ў«п (miss_xv Ё
   miss_yv).
   
   3. ‡ вҐ¬ § Ї®¬­Ёвм ў ¤ўге ЇҐаҐ¬Ґ­­ле Ёб室­го Ї®§ЁжЁо а ЄҐвл, в® Ґбвм
   Є®®а¤Ё­ вл 業ва  Є®а Ў«п (miss_x Ё miss_y).
   
   4. ЏаЁбў®Ёвм ЇҐаҐ¬Ґ­­®© life §­ зҐ­ЁҐ 100.
   
   5. ‚ жЁЄ«Ґ ­ з вм ЇҐаҐ¬ҐйҐ­ЁҐ а ЄҐвл Ї а ««Ґ«м­® Єгабг Є®а Ў«п Ё Є ¦¤л©
   а § ба ў­Ёў вм Є®®а¤Ё­ вл в®аЇҐ¤л б Ја ­Ёж ¬Ё  бвҐа®Ё¤®ў. …б«Ё
   бв®«Є­®ўҐ­ЁҐ ®Ў­ а㦥­®, 㢥«ЁзЁвм бзҐвзЁЄ ®зЄ®ў Ё г¤ «Ёвм  бвҐа®Ё¤.
   
   6. “¬Ґ­миЁвм §­ зҐ­ЁҐ ЇҐаҐ¬Ґ­­®© life, Ё Ґб«Ё ®­  бв «  а ў­  ­г«о, в®
   г­Ёз⮦Ёвм а ЄҐвг Ё ¤ вм ў®§¬®¦­®бвм ЁЈа®Єг ўлбв५Ёвм б«Ґ¤гойЁ© а §.
   
   
   €’Ћѓ
   
ќв  Ј« ў  ¬®Ј«  Ўл ®Є § вмбп ў б®в­Ё а § Ў®«миҐ. “ ¬Ґ­п ¤Ґ©б⢨⥫쭮 Ўл« 
§ ¤ з  Їа®ўҐбвЁ Єа вЄЁ© Єгаб ¤ўг嬥୮© Ја дЁЄЁ. Њл г§­ «Ё ¬­®Ј® ­®ўле
                        - 118 -
Є®­жҐЇжЁ© Ё вҐа¬Ё­®ў. ’ҐЇҐам ¬л §­ Ґ¬, Є Є Їа®Ё§ў®¤Ёвм Їа®бвлҐ
ЇаҐ®Ўа §®ў ­Ёп ®ЎкҐЄв®ў Ё в®зҐЄ ­  Ї«®бЄ®бвЁ. Њл в Є¦Ґ г§­ «Ё ® ¬ ваЁж е
(¤ ¦Ґ ­ҐбЄ®«мЄ® Ў®«миҐ, 祬 ­г¦­®) Ё Є Є ®­Ё ¬®Јгв Ўлвм ЁбЇ®«м§®ў ­л ў
Є®¬ЇмовҐа­®© Ја дЁЄҐ Ё ўЁ¤Ґ®ЁЈа е ¤«п гЇа®йҐ­Ёп ЈҐ®¬ҐваЁзҐбЄЁе
ЇаҐ®Ўа §®ў ­Ё© Ё ЇаЁ¤ ­Ёп Ё¬ Ў®«ҐҐ Є®¬Ї Єв­®© д®а¬л. ‚ Є®­жҐ ¬л ¤ ¦Ґ
гўЁ¤Ґ«Ё Ї®«Ґ  бвҐа®Ё¤®ў ­  нЄа ­Ґ. џ 㢥७, зв® г ў б Ґбвм ¬­®Ј® ў®Їа®б®ў.
Ќ ўҐа­®Ґ, ¤ ¦Ґ Ў®«миҐ, 祬 ў ­ з «Ґ Ё§г祭Ёп нв®© Є­ЁЈЁ. џ Ї®бв а обм
®вўҐвЁвм ­  ­Ёе ў ¤ «м­Ґ©иҐ¬. Ќ® Їа®иг ў б Ї®¬­Ёвм, зв® ­Ґ бгйҐбвўгҐв
Їа®бвле Ё Ўлбвале Їа ўЁ« ¤«п ­ ЇЁб ­Ёп ЁЈа. ќв® ­Ґ б®авЁа®ўЄ  ¬ ббЁў . Ќ ¬,
Є Є Їа®Ја ¬¬Ёбв ¬, ­г¦Ґ­ ­ Ў®а а §«Ёз­ле ваоЄ®ў ¤«п ॠ«Ё§ жЁЁ ­ иЁе Ё¤Ґ©,
  Ї®бҐ¬г Їа®¤®«¦Ё¬ а Ў®вг.                                                                                  
Соседние файлы в папке Книга по созданию трёхмерных игр