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
Wrap
C/C++ Source or Header
|
1995-09-01
|
3KB
|
97 lines
/* 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---------------------------------------