Saturday, 8 March 2014

REFLECTION IN GRPAHICS


/*CSEMATTER.BLOGSPOT.IN
PROGRAM-REFLECTION IN GRAPHICS*/

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<graphics.h>
void display(float [3][3]);
void xreflection(float [3][3],float [3][3]);
void yreflection(float [3][3],float [3][3]);
void linereflection(float [3][3],float [3][3]);
void multiply(float [3][3],float [3][3],float [3][3]);
void multiply1(float [3][3],float [3][3],float [3][3],float [3][3],float [3][3],float [3][3],float [3][3]);
int main()
{
    int gd=DETECT,gm,i,j,k,choice;
    float arr2[3][3],arr[3][3],arr_c[3][3];


    initgraph(&gd,&gm,"C:\TC\bgi");
    printf("Enter the values of x & y coordinates for 1st, 2nd, 3rd vertex");
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(j==0)
                scanf("%f",&arr2[i][0]);
            if(j==1)
                scanf("%f",&arr2[i][1]);
            else if(j==2)
                arr2[i][2]=1;
        }

    }
    display(arr2);
    printf("enter the choice\n");
    printf("enter the 1 for x-reflection\n");
    printf("enter the 2 for y-reflection\n");
    printf("enter the 3 for y=mx+c reflection \n");
    scanf("%d",&choice);
    switch(choice)
    {
    case 1:
        xreflection(arr2,arr);
        display(arr);
        getch();
        closegraph();
        break;
    case 2:
        yreflection(arr2,arr);
        display(arr);
        getch();
        closegraph();
        break;
    case 3:
        linereflection(arr2,arr_c);
        display(arr_c);
        getch();
        closegraph();
        break;
    }
}
void display(float arr2[3][3])

{
    line(320+arr2[0][0],240-arr2[0][1],320+arr2[1][0],240-arr2[1][1]);
    line(320+arr2[1][0],240-arr2[1][1],320+arr2[2][0],240-arr2[2][1]);
    line(320+arr2[2][0],240-arr2[2][1],320+arr2[0][0],240-arr2[0][1]);
}


void xreflection(float arr2[3][3],float arr[3][3])
{
    int i,j;
    float arr3[3][3];
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(i!=j)
                arr3[i][j]=0;
        }
    }
    arr3[0][0]=1;
    arr3[1][1]=-1;
    arr3[2][2]=1;
    multiply(arr3,arr2,arr);
}




void yreflection(float arr2[3][3],float arr[3][3])
{
    int i,j;
    float arr3[3][3];
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(i!=j)
                arr3[i][j]=0;
        }
    }
    arr3[0][0]=-1;
    arr3[1][1]=1;
    arr3[2][2]=1;
    multiply(arr3,arr2,arr);
}


void linereflection(float arr2[3][3],float arr_c[3][3])
{
    int i,j,k;
    float m,c,arr_t[3][3],arr_r[3][3],arr_it[3][3],arr_ir[3][3],arr_ref[3][3];
    float theta1;
    printf("enter the values of m & c");
    scanf("%f %f",&m,&c);
    theta1=atan(m);
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(i==j)
                arr_t[i][j]=1;
            else
                arr_t[i][j]=0;
            arr_t[2][0]=0;
            arr_t[2][1]=-c;
        }
    }

    arr_r[0][0]=cos(theta1);
    arr_r[0][1]=-sin(theta1);
    arr_r[0][2]=0;
    arr_r[1][0]=sin(theta1);
    arr_r[1][1]=cos(theta1);
    arr_r[1][2]=0;
    arr_r[2][0]=0;
    arr_r[2][1]=0;
    arr_r[2][2]=1;

    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(i!=j)
                arr_ref[i][j]=0;
        }
    }
    arr_ref[0][0]=1;
    arr_ref[1][1]=-1;
    arr_ref[2][2]=1;

    arr_ir[0][0]=cos(theta1);
    arr_ir[0][1]=sin(theta1);
    arr_ir[0][2]=0;
    arr_ir[1][0]=-sin(theta1);
    arr_ir[1][1]=cos(theta1);
    arr_ir[1][2]=0;
    arr_ir[2][0]=0;
    arr_ir[2][1]=0;
    arr_ir[2][2]=1;

    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            if(i==j)
                arr_it[i][j]=1;
            else
                arr_it[i][j]=0;
            arr_it[2][0]=0;
            arr_it[2][1]=c;
        }
    }

    multiply1(arr2, arr_t, arr_r, arr_ref, arr_ir, arr_it, arr_c);

}

void multiply(float arr3[3][3],float arr2[3][3],float arr[3][3])
{
    int i,j,k;
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            arr[i][j]=0.0;
        }
    }
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            for(k=0; k<3; k++)
            {
                arr[i][j]=arr[i][j]+arr2[i][k]*arr3[k][j];
            }
        }
    }
}

void multiply1(float arr2[3][3],float arr_t[3][3],float arr_r[3][3],float arr_ref[3][3],float arr_ir[3][3],float arr_it[3][3],float arr_c[3][3])
{
    int i,j,k;
    float arr_a[3][3],arr_b[3][3],arr_d[3][3],arr_e[3][3];
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
                arr_a[i][j]=0;
                arr_b[i][j]=0;
                arr_d[i][j]=0;
                arr_e[i][j]=0;
                arr_c[i][j]=0;
        }
    }
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            for(k=0; k<3; k++)
            {
                arr_a[i][j]=arr_a[i][j]+(arr2[i][k]*arr_t[k][j]);
                arr_b[i][j]=arr_b[i][j]+(arr_r[i][k]*arr_ref[k][j]);
                arr_d[i][j]=arr_d[i][j]+(arr_ir[i][k]*arr_it[k][j]);
            }
        }
    }

    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            for(k=0; k<3; k++)
            {
                arr_e[i][j]=arr_e[i][j]+(arr_a[i][k]*arr_b[k][j]);
            }
        }
    }
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            for(k=0; k<3; k++)
            {
                arr_c[i][j]=arr_c[i][j]+(arr_e[i][k]*arr_d[k][j]);
            }
        }
    }

}

No comments:

Post a Comment