Графическая библиотека 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;
}

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы