Skip to content

Geometric Transformations

 

A) Translation, Rotation Scaling
B) bresenham line
C) Mid-Point Circle

(A) Translation, Rotation Scaling

Code:-

#include
#include
#include
#include
void main()
{
    int val,x1,y1,x2,y2,x1dash,x2dash,y1dash,y2dash,tx,ty,sx,sy,x,y,theta;
    float rad;
    char cont;
    int gdriver=DETECT,gmode,errorcode;
    initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
    printf("Select the following option\n");
    printf("1.Translation\n");
    printf("2.Scaling\n");
    printf("3.Rotation\n");
    scanf("%d",&val);
    switch (val)
    {
        case 1:
        printf("You have selected translation\n");
        printf("Enter the first co-ordinates\n");
        scanf("%d%d",&x1,&y1);
        printf("Enter the second co-ordinates\n");
        scanf("%d%d",&x2,&y2);
        line(x1,y1,x2,y2);
        printf("Enter the translation vector in x direction\n");
        scanf("%d",&tx);
        printf("Enter the translation vector in y direction\n");
        scanf("%d",&ty);
        x1dash=x1+tx;
        y1dash=y1+ty;
        x2dash=x2+tx;
        y2dash=y2+ty;
        line(x1dash,y1dash,x2dash,y2dash);
        break;
case 2:
        printf("You have selected Scaling\n");
        printf("Enter the radius of the circle\n");
        scanf("%d",&x1);
        circle(0,0,x1);
        printf("Enter the scaling vector \n");
        scanf("%d",&sx);
        x1dash=x1*sx;
        circle(0,0,x1dash);
        break;   
case 3:
        printf("You have entered Rotation\n");
        printf("Enter the co-ordinates of the line about the origin\n");
        scanf("%d%d",&x1,&y1);
        line(0,0,x1,y1);
        printf("Enter the angle by which the line is to be rotated\n");
        scanf("%d",&theta);
        rad=theta*(3.14/180);
        x=(x1*cos(rad))-(y1*sin(rad));
        y=(y1*cos(rad))+(x1*sin(rad));
        printf("this is new x  co-ordinate %d",x);
        printf("\nthis is new y co-ordinate %d",y);
line(0,0,x,y);
        break;
default:
        printf("You have selected invalid option\n");
        break;
    }
    getch();
}

 

Output for TRANSLATION

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Output for SCALING

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Output for ROTATION

(B)bresenham line

Code:-

#include
#include
#include
void main()
{
    int x1,y1,x2,y2,dx,dy,xdiff,ydiff,i;
    float m,e,X,Y;
    int gdriver=DETECT,gmode,errorcode;
    initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
    printf("enter the first co-ordinates\n");
    scanf("%d%d",&x1,&y1);
    printf("\n");
    printf("Enter the second co-ordinates\n");
    scanf("%d%d",&x2,&y2);
    if(x1==x2 && y1==y2)
    {
        putpixel(x1,y1,15);
        printf("You have entered same value for both co-ordinates");
    }
    else
    {
        X=x1;
        Y=y1;
        dx=x2-x1;
        dy=y2-y1;
        m=dy/dx;
        e=-1/2;
        e=e+m;
        for(i=0;i<=dx;i++) { putpixel(X,Y,15); while(e>0)
            {
                Y=Y+1;
                e=e-1;
            }
            X=X+1;
            e=e+m;
        }
    }
getch();
}

Output Of An bresenham line

(C)Mid-Point Circle

Code:-

#include
#include
#include
#include
void main()
{
    int xc,yc,d,r;
    int x=0,y;
    int gdriver=DETECT,gmode,errorcode;
    initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
    printf("Enter the co-ordinates of the circle\n");
    scanf("%d%d",&xc,&yc);
    putpixel(xc,yc,15);
    printf("Enter the radius of the circle\n");
    scanf("%d",&r);
    y=r;
    d=1-r;
    while(x<=y)
    {
        putpixel(xc+x,yc+y,15);
        putpixel(xc+x,yc-y,15);
        putpixel(xc-x,yc+y,15);
        putpixel(xc-x,yc-y,15);
        putpixel(xc+y,yc+x,15);
        putpixel(xc+y,yc-x,15);
        putpixel(xc-y,yc+x,15);
        putpixel(xc-y,yc-x,15);
        if(d<0)
            d=d+(2*x)+1;
        else
{
d=d+(2*(x-y))+1;
y--;
       }
       x++;
    }
    getch(); 
}

OUTPUT FOR MID-POINT CIRCLE DRAWING

Leave a Reply

Your email address will not be published. Required fields are marked *

error: Content is protected !!