home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2001 December / pcwk12201b.iso / Reklamy / CAD-Projekt / MegaCAD-4_5 / CC / LEKCJA06.C_ / LEKCJA06.C
C/C++ Source or Header  |  1995-09-01  |  3KB  |  97 lines

  1. /*                      LEKCJA06.C
  2. //---------------------------------------------------------------------------
  3. Temat:
  4.         Definiowanie elementu POLILINIA
  5. //---------------------------------------------------------------------------
  6. Funkcja:
  7.         EXT(215) ushort AddPolylnPt(   
  8. //---------------------------------------------------------------------------
  9.  
  10.    Polilinia (albo kontur) jest ciÑgiem zdefiniowanym z linii i/lub êuków.
  11.    Jedna polilinia mo╛e si⌐ skêadaå maksymalnie z 1300 elementów.
  12.  
  13.  
  14. typedef struct _polyln
  15. {
  16.     ushort   num;        // Iloÿå zdefiniowanych punktów
  17.     t_polypt _far *ppt;  // Tablica opisujÑca punkty
  18. } t_polyln;
  19.  
  20. typedef struct _polypt
  21. {
  22.     double mpd;          // strzaêka wygi⌐cia êuku 
  23.     double px;           // wspóêrz⌐dna X punktu
  24.     double py;           // wspóêrz⌐dna Y punktu
  25. } t_polypt;
  26.  
  27.  
  28.    Aby uêatwiå doêÑczenie nowego elementu do polilinii zdefiniowano funkcj⌐:
  29.    
  30. EXT(215) ushort AddPolylnPt(   
  31.              t_polyln *polyln, // Struktura polilinii
  32.              double   *mpd,    // strzaêka wygi⌐cia êuku
  33.              double   px,      // wspóêrz⌐dna X punktu
  34.              double   py);     // wspóêrz⌐dna Y punktu
  35.  
  36.  
  37.  Zmienna strzaêki ugi⌐cia mo╛e przyjmowaå nast⌐pujÑce wartoÿci:
  38.  
  39.         mpd = NULL    : cz⌐ÿå niewidoczna
  40.         mpd = 0       : cz⌐ÿå prosta = odcinek
  41.         mpd!= 0       : cz⌐ÿå b⌐dÑca êukiem o strzaêce ugi⌐cia = 'mpd'
  42.                               wartoÿå dodatnia jest ugi⌐ciem 'w prawo',
  43.                               a ujemna 'w lewo'.
  44.  
  45. Return:
  46.     FALSE => jeÿli przekroczono maksymalnÑ iloÿå punktów
  47.     TRUE  => prawidêowe dziaêanie
  48.  
  49.  
  50. */
  51. //---------------------------------------------------------------------------
  52. //  program zamienia wykres funkcji kwadratowej [y= a*x²+b*x+c] na polilinie 
  53. //
  54. // Andrzej Setman                                           Wieden 13.08.95
  55. //---------------------------------------------------------------------------
  56. #include "std.h"
  57. #include "megatyp.h"
  58. #include "megacad.h"
  59. #define   KROK        200 
  60. //---------------------------------------------------------------------------
  61. short main(char *filename, char *args)
  62. {
  63.    t_polygon gon;
  64.    t_polyln  kontur;  
  65.    t_polypt  polypt[KROK+1]; 
  66.  
  67.    double wyb, kier;                         // wartoÿå i kier. wyboczenia  
  68.    double xmax= 100.0, xmin= -100;           // liczony przedziaê
  69.    double a= 0.01, b= 0, c= 20;              // parametry paraboli
  70.    double x, y, x0, y0, xe, ys;
  71.    double delta;                             // interwaê
  72.    double r;                                 // strzaêka wyboczenia
  73.    short  f;
  74.  
  75.    kier= a>0 ? -1 : 0;                       // kierunek ugiecia luku
  76.    delta= (xmax-xmin) / KROK;                
  77.    r= kier*(0.5*(a*delta*delta+b*delta)-(0.25*a*delta*delta+0.5*b*delta));
  78.  
  79.    kontur.ppt= polypt;                       // inicjalizacja konturu
  80.    kontur.num= 0;
  81.  
  82.    for (f=0 ; f<=KROK ; f++)
  83.    {
  84.       x= xmin + f * delta;
  85.       xe= x - delta/2;
  86.       y= a*x*x + b*x +c;
  87.       wyb= f>0 ? r : 0;
  88.       x0= x;
  89.       y0= y;
  90.       AddPolylnPt(&kontur,&wyb,x,y);
  91.    }
  92.    CreateEntity(E_POLYLN,NULL,&kontur); 
  93.    savecount(); 
  94.    return(0);
  95. }
  96. //------------------------------KONIEC---------------------------------------
  97.