Translation of line comes under the category of geometric transformations.In geometric transformations,the object is transformed relative to a stationary coordinate system or background.In 2D translation,the object is displaced along x and y direction and magnitude of displacement is specified by translation parameters `tx`

and `ty`

.

In order to perform a sequence of transformations(translation,scaling,rotation or reflection) as a sequential process,we need to represent all the transformation equations in matrix multiplication.For this, we use Homogeneous Coordinate system which uses 3 coordinates to represent every point.

For a given point `P(x,y)`

, P can be represented in Homogeneous Coordinate system as `(x,y,1)`

.To perform all the transformations using matrix multiplication,we need to convert 2*2 transformation matrix to 3*3 transformation matrix.A sequence of transformations can be performed by first multiplying all the transformation matrices and then multiplying 3*1 point matrix with the result of multiplication.

```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*Header file for built-in graphics functions such as plot() and initgraph()*/
#include<graphics.h>
#define pi 3.1412
/*Function which mutiplies two matrices a and b stores the result in matrix c*/
void multiply(int a[3][3],int b[3][1],int c[3][1])
{
int i,j,k;
for(i=0;i<3;i++)
{
for(j=0;j<1;j++)
{
c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
}
int main()
{
int x1, y1,x2,y2, tx, ty,i,j;
int P1[3][1],P2[3][1],T[3][3],ans1[3][1],ans2[3][1];
int gm,gd=DETECT;
initgraph(&gd,&gm,"c:\\tc\\bgi");/*loads the graphic driver and puts system into graphics mode*/
/*
syntax for initgraph() is:
void initgraph(int *graphdriver, int *graphmode, char *pathtodriver);
*graphdriver is an integer that specifies the graphics driver to be used.DETECT requests auto-detect for the driver.
*graphmode is an integer that specifies the initial graphics mode.If *graphdriver equals DETECT,*graphmode is set by initgraph to the highest resolution available for the detected driver.
*/
clrscr();
printf ("\n\t\t TRANSLATIONn\n Enter the starting point of line ");
scanf ("%d %d", &x1, &y1);
printf("\nEnter end point of line");
scanf("%d %d",&x2,&y2);
line(x1,y1,x2,y2);
printf("\n Enter the translation distances: ");
scanf("%d %d", &tx, &ty);
/*Homogeneous coordinate matrix representation for starting point*/
P1[0][0] = x1;
P1[1][0] = y1;
P1[2][0] = 1;
/*Homogeneous coordinate matrix representation for end point*/
P2[0][0] = x2;
P2[1][0] = y2;
P2[2][0] = 1;
/* 3*3 transformation matrix for performing 2D translation*/
for( i=0;i<3;i++)
{
for( j=0;j<3;j++)
{
if(i==0 && j==2)
T[i][j]=tx;
else if(i==1 && j==2)
T[i][j]=ty;
else if((i==2 && j==2)||(i==1 && j==1)||(i==0 && j==0))
T[i][j]=1;
else
T[i][j]=0;
}
}
/*Multiply point matrix with transformation matrix for both the points such that the ans1 and ans2 store homogeneuos coordinate representation for translated end points*/
multiply(T,P1,ans1);
multiply(T,P2,ans2);
printf("\n The final end points are :(%d,%d) and (%d,%d)\n",ans1[0][0],ans1[1][0],ans2[0][0],ans2[1][0]);
line(ans1[0][0],ans1[1][0],ans2[0][0],ans2[1][0]);
getch();
closegraph();
/*closegraph function closes the graphics mode, deallocates all memory allocated by graphics system and restores the screen to the original mode*/
return 0;
}
```

You can run this code in Turbo C++. Dev C++ and Microsoft visual studio do not support graphics libraries.

You can download Turbo C++ using this link Turbo C++

This content has been helpful to you?

Thanks for contributing!