Hi Guys,
This is a program on reflection of an 'N' sided polygon using BGI Graphics in C++.The reflection is bout'
y=(getmaxy()+1)/2(The center line of the screen).I have done it in following steps:
In the logic() function,
1)I have translated it(any polygon) to y=0.
2)then,reflected it about y=0.
3)At last translated it back by originally translated distance.
There is no sort of syntactical,runtime or compile time error(I think so),I have checked it many times.
The problem is that I can't get the desired output .Just compile it on Turbo C++.
AND, I have done it using multiplication of a 3*3 matrix and a 3*n matrix.
Here is the program.
This is a program on reflection of an 'N' sided polygon using BGI Graphics in C++.The reflection is bout'
y=(getmaxy()+1)/2(The center line of the screen).I have done it in following steps:
In the logic() function,
1)I have translated it(any polygon) to y=0.
2)then,reflected it about y=0.
3)At last translated it back by originally translated distance.
There is no sort of syntactical,runtime or compile time error(I think so),I have checked it many times.
The problem is that I can't get the desired output .Just compile it on Turbo C++.
AND, I have done it using multiplication of a 3*3 matrix and a 3*n matrix.
Here is the program.
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
class reflection
{
int n,**ptr,**ptr_1;
public:
void mem_alloc(void);
void mem_dealloc(void);
void logic(void);
void display(void);
void initialize(void);
reflection(int n1)
{
n=n1;
}
};
void reflection::mem_alloc(void)
{
ptr=new int*[n];
ptr_1=new int*[n];
for(int i=0;i<n;i++)
{
*(ptr+i)=new int[3];
*(ptr_1+i)=new int[3];
}
}
void reflection::initialize(void)
{
cout<<"Enter the initial coordinates (x,y) for"<<" "<<n<<" "<<"vertices\n";
for(int i=0;i<n;i++)
{
int j=0;
cout<<"Enter x"<<i<<":";
cin>>(ptr[i])[j];
(ptr_1[i])[j]=0;
j++;
cout<<"Enter y"<<i<<":";
cin>>(ptr[i])[j];
(ptr_1[i])[j]=0;
j++;
(ptr[i])[j]=1;
(ptr_1[i])[j]=0;
}
}
void reflection::logic(void)
{
int k;
int a[3][3]={{1,0,0},{0,1,-(getmaxy()+1)/2},{0,0,1}};
int b[3][3]={{1,0,0},{0,-1,0},{0,0,1}};
int c[3][3]={{1,0,0},{0,1,+(getmaxy()+1)/2},{0,0,1}};
for(k=0;k<n;k++)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
(ptr_1[k])[i]+=a[i][j]*(ptr[k])[j];
}
}
for(k=0;k<n;k++)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
(ptr_1[k])[i]+=b[i][j]*(ptr[k])[j];
}
}
for(k=0;k<n;k++)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
(ptr_1[k])[i]+=c[i][j]*(ptr[k])[j];
}
}
}
void reflection::display(void)
{
int j=0;
line(0,(getmaxy()+1)/2,getmaxx()+1,(getmaxy()+1)/2);
for(int i=0;i<n-1;i++)
{
line((ptr[i])[j],(ptr[i])[j+1],(ptr[i+1])[j],(ptr[i+1])[j+1]);
line((ptr_1[i])[j],(ptr_1[i])[j+1],(ptr_1[i+1])[j],(ptr_1[i+1])[j+1]);
}
line((ptr[0])[0],(ptr[0])[1],(ptr[n-1])[0],(ptr[n-1])[1]);
line((ptr_1[0])[0],(ptr_1[0])[1],(ptr_1[n-1])[0],(ptr_1[n-1])[1]);
}
void reflection::mem_dealloc(void)
{
for(int i=0;i<n;i++)
{
delete ptr[i];
delete ptr_1[i];
}
}
int main()
{
int n_1;
clrscr();
cout<<"Enter the no of sides\n";
cin>>n_1;
reflection t(n_1);
t.mem_alloc();
clrscr();
t.initialize();
t.logic();
int gd=DETECT,gm;
initgraph(&gd,&gm,"C:\\TC\\bgi");
cleardevice();
t.display();
t.mem_dealloc();
getch();
closegraph();
return 0;
}