home *** CD-ROM | disk | FTP | other *** search
- /* LEKCJA06.C
- //---------------------------------------------------------------------------
- Temat:
- Definiowanie elementu POLILINIA
- //---------------------------------------------------------------------------
- Funkcja:
- EXT(215) ushort AddPolylnPt(
- //---------------------------------------------------------------------------
-
- Polilinia (albo kontur) jest ciÑgiem zdefiniowanym z linii i/lub êuków.
- Jedna polilinia mo╛e si⌐ skêadaå maksymalnie z 1300 elementów.
-
-
- typedef struct _polyln
- {
- ushort num; // Iloÿå zdefiniowanych punktów
- t_polypt _far *ppt; // Tablica opisujÑca punkty
- } t_polyln;
-
- typedef struct _polypt
- {
- double mpd; // strzaêka wygi⌐cia êuku
- double px; // wspóêrz⌐dna X punktu
- double py; // wspóêrz⌐dna Y punktu
- } t_polypt;
-
-
- Aby uêatwiå doêÑczenie nowego elementu do polilinii zdefiniowano funkcj⌐:
-
- EXT(215) ushort AddPolylnPt(
- t_polyln *polyln, // Struktura polilinii
- double *mpd, // strzaêka wygi⌐cia êuku
- double px, // wspóêrz⌐dna X punktu
- double py); // wspóêrz⌐dna Y punktu
-
-
- Zmienna strzaêki ugi⌐cia mo╛e przyjmowaå nast⌐pujÑce wartoÿci:
-
- mpd = NULL : cz⌐ÿå niewidoczna
- mpd = 0 : cz⌐ÿå prosta = odcinek
- mpd!= 0 : cz⌐ÿå b⌐dÑca êukiem o strzaêce ugi⌐cia = 'mpd'
- wartoÿå dodatnia jest ugi⌐ciem 'w prawo',
- a ujemna 'w lewo'.
-
- Return:
- FALSE => jeÿli przekroczono maksymalnÑ iloÿå punktów
- TRUE => prawidêowe dziaêanie
-
-
- */
- //---------------------------------------------------------------------------
- // program zamienia wykres funkcji kwadratowej [y= a*x²+b*x+c] na polilinie
- //
- // Andrzej Setman Wieden 13.08.95
- //---------------------------------------------------------------------------
- #include "std.h"
- #include "megatyp.h"
- #include "megacad.h"
- #define KROK 200
- //---------------------------------------------------------------------------
- short main(char *filename, char *args)
- {
- t_polygon gon;
- t_polyln kontur;
- t_polypt polypt[KROK+1];
-
- double wyb, kier; // wartoÿå i kier. wyboczenia
- double xmax= 100.0, xmin= -100; // liczony przedziaê
- double a= 0.01, b= 0, c= 20; // parametry paraboli
- double x, y, x0, y0, xe, ys;
- double delta; // interwaê
- double r; // strzaêka wyboczenia
- short f;
-
- kier= a>0 ? -1 : 0; // kierunek ugiecia luku
- delta= (xmax-xmin) / KROK;
- r= kier*(0.5*(a*delta*delta+b*delta)-(0.25*a*delta*delta+0.5*b*delta));
-
- kontur.ppt= polypt; // inicjalizacja konturu
- kontur.num= 0;
-
- for (f=0 ; f<=KROK ; f++)
- {
- x= xmin + f * delta;
- xe= x - delta/2;
- y= a*x*x + b*x +c;
- wyb= f>0 ? r : 0;
- x0= x;
- y0= y;
- AddPolylnPt(&kontur,&wyb,x,y);
- }
- CreateEntity(E_POLYLN,NULL,&kontur);
- savecount();
- return(0);
- }
- //------------------------------KONIEC---------------------------------------
-