Click here to Skip to main content
15,886,362 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
like i want to draw a polygon in c++ using graphics.h . then ask for coordinates and sides. x1, x2 ,y1 ,y2. then draw the polygon and show its area and perimeter as output. using their mathamatical formulas.
I have done this.
C++
#include <iostream.h>
 #include <graphics.h>
 #include    <conio.h>
 #include     <math.h>

 void show_screen( );

 void Polygon(const int,const int []);

 void Line(const int,const int,const int,const int);

 int main( )
    {
       int driver=VGA;
       int mode=VGAHI;

       int n=0;

       do
      {
	 show_screen( );

	 gotoxy(12,13);
	 cout<<"Enter the number of points : ";
	 cin>>n;

	 int *coordinates=new int[(n*2)];

	 for(int count=0;count<n;count++)>
	{
	   gotoxy(8,18);
	   cout<<"Coordinates of Point-"<<(count+1)<<" (x"<<(count+1)<<",y"<<(count+1)<<") :";


	   gotoxy(12,21);
	   cout<<"Enter the value of x"<<(count+1)<<" = ";
	   cin>>coordinates[(count*2)];

	   gotoxy(12,22);
	   cout<<"Enter the value of y"<<(count+1)<<" = ";
	   cin>>coordinates[((count*2)+1)];

	   gotoxy(8,18);
	   cout<<"                                            ";

	   gotoxy(12,21);
	   cout<<"                                            ";

	   gotoxy(12,22);
	   cout<<"                                            ";
	 }

	 initgraph(&driver,&mode,"c:\\tc\\Bgi");

	 setcolor(15);
	   Polygon(n,coordinates);

	     delete coordinates;

	 setcolor(15);
	   outtextxy(110,460,"Press <enter> to continue or any other key to exit.");

	 int key=int(getch( ));

	 if(key!=13)
	break;
      }
       while(1);

       return 0;
    }

 void Polygon(const int n,const int coordinates[])
    {
       if(n>=2)
      {
	 Line(coordinates[0],coordinates[1],
			 coordinates[2],coordinates[3]);

	 for(int count=1;count<(n-1);count++)
	Line(coordinates[(count*2)],coordinates[((count*2)+1)],
			coordinates[((count+1)*2)],
			coordinates[(((count+1)*2)+1)]);
      }
    }

void Line(const int x_1,const int y_1,const int x_2,const int y_2)
    {
       int color=getcolor( );

       int x1=x_1;
       int y1=y_1;

       int x2=x_2;
       int y2=y_2;

       if(x_1>x_2)
      {
	 x1=x_2;
	 y1=y_2;

	 x2=x_1;
	 y2=y_1;
      }

       int dx=abs(x2-x1);
       int dy=abs(y2-y1);
       int inc_dec=((y2>=y1)?1:-1);

       if(dx>dy)
      {
	 int two_dy=(2*dy);
	 int two_dy_dx=(2*(dy-dx));
	 int p=((2*dy)-dx);

	 int x=x1;
	 int y=y1;

	 putpixel(x,y,color);

	 while(x<x2)>
	{
	   x++;

	   if(p<0)
	      p+=two_dy;

	   else
	      {
	     y+=inc_dec;
	     p+=two_dy_dx;
	      }

	   putpixel(x,y,color);
	}
      }

       else
      {
	 int two_dx=(2*dx);
	 int two_dx_dy=(2*(dx-dy));
	 int p=((2*dx)-dy);

	 int x=x1;
	 int y=y1;

	 putpixel(x,y,color);

	 while(y!=y2)
	{
	   y+=inc_dec;

	   if(p<0)
	      p+=two_dx;

	   else
	      {
	     x++;
	     p+=two_dx_dy;
	      }

	   putpixel(x,y,color);
	}
      }
    }

void show_screen( )
    {
       restorecrtmode( );
       textmode(C4350);

       textbackground(1);
       cprintf(" Polygon ");
       textbackground(8);


       gotoxy(1,2);
    }
Posted
Updated 29-Jun-15 22:25pm
v3
Comments
[no name] 30-Jun-15 2:13am    
Show us what you have done.
Member 11801907 30-Jun-15 2:51am    
#include <graphics.h>
#include <conio.h>

main()
{
int gd=DETECT,gm,points[]={320,150,420,300,250,300,320,150};

initgraph(&gd, &gm, "C:\\TC\\BGI");

drawpoly(4, points);

getch();
closegraph();
return 0;
}

Assuming you are able collecting input from the user, then drawing the polygon is trivial:
call
C
moveto(x0,y0); lineto(x1,y1);...;lineto(x0,y0);

Computing the perimeter is relatively easy, since, for instance
C
l01 = sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));

gives the length of the side connecting point 0 to point 1.
Computing the area is a bit trickier, here you may find an interesting approach: "Area of Irregular Polygons"[^].
 
Share this answer
 
Comments
Member 11801907 30-Jun-15 3:09am    
and what if I ask for input from user? what's that "101"?
CPallini 30-Jun-15 3:22am    
You should ask input from the user. I am just assuming you are able to do that (hence I didn't provide an example of).
l01 is a variable (double) holing the length of the P0-P1 side. You know the perimeter of the polygon is just the sum of such lengths.
Member 11801907 30-Jun-15 4:10am    
please check the question again. and tell me how to calculate polygons area and permieter?
CPallini 30-Jun-15 4:30am    
Why don't you use the BGI provided line function?
I already shown you how to compute side length, just iterate on all the polygon sides.
In a similar way, in order to compute polygon area, you might implement the algorithm described in the page I linked.
Member 11801907 30-Jun-15 4:33am    
I don't get it. :(
We do not do your homework: it is set for a reason. It is there so that you think about what you have been told, and try to understand it. It is also there so that your tutor can identify areas where you are weak, and focus more attention on remedial action.

Try it yourself, you may find it is not as difficult as you think!

If you meet a specific problem, then please ask about that and we will do our best to help. But we aren't going to do it all for you!
 
Share this answer
 
Comments
Member 11801907 30-Jun-15 2:25am    
but atleast give me some hints. :|
Member 11801907 30-Jun-15 2:26am    
I have to do it in turbo c.
It's too difficult.
OriginalGriff 30-Jun-15 2:34am    
So what have you tried?
Anything?
Member 11801907 30-Jun-15 2:39am    
#include <graphics.h>
#include <conio.h>

main()
{
int gd=DETECT,gm,points[]={320,150,420,300,250,300,320,150};

initgraph(&gd, &gm, "C:\\TC\\BGI");

drawpoly(4, points);

getch();
closegraph();
return 0;
}

I did this. But I need to do that x1, x2, y1, y2 thing to use polygons formula. give me some hint.
CPallini 30-Jun-15 2:41am    
Why must you use turbo C ?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900