2D Transformation - Reflection about X and Y axis and Arbitrary Axis

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void main()
{
int a,a1,b,b1,c,c1,xt,ch;
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc\\bgi");
a=getmaxx();
a1=getmaxy();
b=a/2;
b1=a1/2;

line(b,0,b,a1);
line(0,b1,a,b1);
line(400,200,600,200);
line(400,200,400,100);
line(400,100,600,200);

printf("1.origin\n");
printf("2.x-axis\n");
printf("3.y-axis\n");
printf("4.exit\n");

do
{
printf("Enter your choice\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
      c=400-b;c1=200-b1;
      line(b-c,b1-c1,b-c-200,b1-c1);
      line(b-c,b1-c1,b-c,b1-c1+100);
      line(b-c,b1-c1+100,b-c-200,b1-c1);
      break;
case 2:
      c=400-b;c1=200-b1;
      line(b+c,b1-c1,b+c+200,b1-c1);
      line(b+c,b1-c1,b+c,b1-c1+100);
      line(b+c,b1-c1+100,b+c+200,b1-c1);
      break;


case 3:
      c=400-b;c1=200-b1;
      line(b-c,b1+c1,b-c-200,b1+c1);
      line(b-c,b1+c1,b-c,b1+c1-100);
      line(b-c,b1+c1-100,b-c-200,b1+c1);
      break;
}

}while(ch<4);
getch();
closegraph();
}
Another Program
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void accept(int a[30][3],int n)
{
 int i;
 printf("\nEnter the coordinates of vertices:\n");
 for(i=0;i<n;i++)
 {
  scanf("%d%d",&a[i][0],&a[i][1]);
 }
}

 void mul(int a[30][3],int s[3][3],int m[30][3],int n)
{
 int i,j,k;
 for(i=0;i<n;i++)
 {
  for(j=0;j<3;j++)
  {
   m[i][j]=0;
   for(k=0;k<3;k++)
   m[i][j]+=(a[i][k]*s[k][j]);
  }
       }
}

void display(int a[30][3],int m[30][3],int n)
{
 int i,mx,my;
 cleardevice();
 mx=getmaxx()/2;
 my=getmaxy()/2;
 setcolor(1);
 line(0,my,getmaxx(),my);
 line(mx,0,mx,getmaxy());
 for(i=10;i<=mx;i=i+10)
 {
  putpixel(mx+i,my+1,4);
  putpixel(mx+i,my-1,4);
  putpixel(mx-i,my+1,4);
  putpixel(mx-i,my-1,4);
  putpixel(mx+1,my+i,4);
  putpixel(mx+1,my-i,4);
  putpixel(mx-1,my+i,4);
  putpixel(mx-1,my-i,4);
 }
 for(i=0;i<n-1;i++)
 {
  setcolor(2);
  line(mx+a[i][0],my-a[i][1],mx+a[i+1][0],my-a[i+1][1]);
  setcolor(5);
  line(mx+m[i][0],my-m[i][1],mx+m[i+1][0],my-m[i+1][1]);
 }
  setcolor(2);
  line(mx+a[i][0],my-a[i][1],mx+a[0][0],my-a[0][1]);
  setcolor(5);
  line(mx+m[i][0],my-m[i][1],mx+m[0][0],my-m[0][1]);
}
void main()
{
 int gd=DETECT,gm,n,a[30][3],ch,s[3][3],m[30][3],i,j;
 initgraph(&gd,&gm,"c:\\tc\\bgi");
 printf("\nEnter the edges of polygon\n");
 scanf("%d",&n);
 accept(a,n);
 do
 {
  printf("\nEnter your choice: \n1.Reflection about x-axis \n2.Reflection about y-axis \n3.Reflection about line y=x \n4.Reflection  about y=-x \n5.Reflection about origin\n6.Exit\n");
  scanf("%d",&ch);
  for(i=0;i<3;i++)
  {
   for(j=0;j<3;j++)
    s[i][j]=0;
  } s[2][2]=1;
  switch(ch)
  {
   case 1: cleardevice();
    s[0][0]=1;
    s[1][1]=-1;
    mul(a,s,m,n);
    display(a,m,n);
   break;
   case 2: cleardevice();
    s[0][0]=-1;
    s[1][1]=1;
    mul(a,s,m,n);
    display(a,m,n);
    break;
   case 3: cleardevice();
    s[0][1]=1;
    s[1][0]=1;
    mul(a,s,m,n);
    display(a,m,n);
   break;
   case 4: cleardevice();
    s[0][1]=-1;
    s[1][0]=-1;
    mul(a,s,m,n);
    display(a,m,n);
   break;
   case 5: cleardevice();
    s[0][0]=-1;
    s[1][1]=-1;
    mul(a,s,m,n);
    display(a,m,n);
   break;
  }
 }while(ch!=6);
 getch();
 closegraph();
}