Графическая библиотека BGI, рисование фигур - C (СИ)
Формулировка задачи:
Подскажите пожалуйста как нарисовать N угольник, как рисовать функции я в курсе и проблем с этим нет, но вот нарисовать N угольник, причем количество углов задается пользователем до меня ни как не доходит!
Решение задачи: «Графическая библиотека BGI, рисование фигур»
textual
Листинг программы
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "graphics.h"
#include <math.h>
#define Pi 3.142
int main()
{
char line[100],
Lx[3]="X",
Ly[3]="Y",
Lo[3]="O",
mas1[80],
mas2[80],
mas3[80];
float Xmin,Xmax,
Ymin,Ymax,
c,a1,a2,b1,b2,
dx,p,x,b,a,y,z,g,
data1[100][100],
data2[100][100];
int w,h,W,H,o,n,i,j,m,
imin,
xl,xr,yr,yl,
Xgr,Ygr,X1gr,Y1gr;
c=Pi/180;
i=0;
data1[0][0]=5;
data1[0][1]=-5;
data1[1][0]=-5;
data1[1][1]=-5;
data1[2][0]=0;
data1[2][1]=5;
Xmin=-10;
Ymin=-10;
Xmax=10;
Ymax=10;
W=getmaxwidth();
H=getmaxheight();
printf("MAXIMUM Display Resolution is: %dx%d\n",W,H);
o=1;
while(o)
{
printf("Enter width ");
scanf("%d",&w);
printf("Enter height ");
scanf("%d",&h);
if(w>W||h>H)
{
printf("This values is impermissible!\nPlease enter another values.\n\n");
}
else
{
o=0;
}
}
o=1;
while(o)
{
printf("Enter xl ");
scanf("%d",&xl);
printf("Enter yl ");
scanf("%d",&yl);
printf("Enter xr ");
scanf("%d",&xr);
printf("Enter yr ");
scanf("%d",&yr);
if(abs(xr-xl)>w||abs(yl-yr)>h||xl>=xr||yl>=yr||xl<50||yl<50)
{
printf("This values is impermoissible!\nPlease enter another values.\nRemember!! xl and yl must be more than 200!!\n\n");
}
else
{
o=0;
}
}
printf("Enter the anle: ");
scanf("%f",&g);
sprintf(line,"Press Enter!!!!");
initwindow(w,h);
clearviewport();
rectangle(xl, yl, xr, yr);
a1=(xr-xl)/(Xmax-Xmin);
a2=xl-a1*Xmin;
b1=(yl-yr)/(Ymax-Ymin);
b2=yl-b1*Ymax;
outtextxy(xl,yl-40,line);
setcolor(GREEN);
X1gr=a1*(data1[0][0])+a2;
Y1gr=b1*data1[0][1]+b2;
moveto(X1gr,Y1gr);
for(i=1;i<3;i++)
{
Xgr=int(a1*(data1[i][0])+a2);
Ygr=int(b1*data1[i][1]+b2);
lineto(Xgr,Ygr);
}
lineto(X1gr,Y1gr);
z=0;
outtextxy(xl,yl-40,line);
getch();
while(abs((z-1)*c)<abs(g*c))
{
clearviewport();
setcolor(15);
rectangle(xl, yl, xr, yr);
setcolor(2);
for(j=0;j<3;j++)
{
data2[j][0]=data1[j][0]*cos(z*c)-data1[j][1]*sin(z*c);
data2[j][1]=data1[j][0]*sin(z*c)+data1[j][1]*cos(z*c);
}
X1gr=int(a1*(data2[0][0])+a2);
Y1gr=int(b1*data2[0][1]+b2);
moveto(X1gr,Y1gr);
for(i=1;i<3;i++)
{
Xgr=int(a1*(data2[i][0])+a2);
Ygr=int(b1*data2[i][1]+b2);
lineto(Xgr,Ygr);
}
lineto(X1gr,Y1gr);
delay(1);
if(g<0) z--;
else z++;
}
setcolor(15);
for(i=0;i<3;i++)
{
a=fabs(data2[i][0]-data1[i][0]);
b=fabs(data2[i][1]-data1[i][1]);
c=sqrt(a*a+b*b);
sprintf(mas1,"Shift: %.1f",c);
Xgr=int(a1*(data2[i][0])+a2);
Ygr=int(b1*data2[i][1]+b2);
outtextxy(Xgr+5,Ygr+5,mas1);
}
getch();
closegraph();
return 0;
}