#include #include #include #include #include #include "wllib.h" #ifdef FOR_X11 #include "mop451.xpm" /* Ikona pro X Window System$^{\def\fntmag{\magstep.2}\rm TM}$ */ #endif struct { long x,y; /* Souęadnice v~gfx */ } *ar; /* Pole vîech bodű */ unsigned N,p; /* $N$, souçasný bod pęi kreslení */ void drawgfx(void) { /* vykresli gfx */ for (p=0;p<=N;p++) /* pro vîechny body dokola (první 2-krát) */ wl_line(ar[p==N?0:p].x,ar[p==N?0:p].y); /* spoj çáru */ } int main(int argc,char **argv) { int i,j,rot=0,nkvx=0; /* pomocné, pomocné, smër uhýbání, není konvexní */ long x,y; /* pro naçítání (zdrojové souę.) */ float k=sin((float)60); wl_init(&argc,argv,"MOP451"); /* inicializuj gfx */ if (scanf("%u",&N)!=1) iofailn(EINVAL); /* naçti $N$ */ if (N<3) iofailn(EINVAL); /* chceme mnohoúhelník */ if (!(ar=malloc(N*sizeof(*ar)))) iofail(); /* pole bodű */ for (i=0;i=N?(q)-N:(q)] /* pole se zrcadlem */ if (i>=2&&!nkvx) if ((j=(A(i-1).x-A(i-2).x)*(A(i).y-A(i-2).y) -(A(i-1).y-A(i-2).y)*(A(i).x-A(i-2).x))) { /* do \var j dej zatoçení souç. bodu */ #undef A if (rot) nkvx|=j!=rot; /* víme-li jiů, kam zatáçíme, otestuj konvexnost */ else rot=j; /* nyní jiů víme, kam zatáçíme */ } } if (!rot) iofailn(EINVAL); /* vîechny body náleůely pęímce */ printf("Zadaný %u-úhelník %s konvexní.\n",N,nkvx?"není":"je"); wl_done(); /* gfx okno */ return(nkvx); /* hotovo */ }