Therefore, scaling with respect to origin is achieved by multiplying x coordinate with factor Sx and y coordinate with factor Sy. Therefore, following equations can be expressed:
x′ = x.Sx
y′ = y.Sy
In matrix form it can be expressed as:
P′ = S.P
#include<stdio.h>#include<dos.h>
#include<ctype.h>
#include<conio.h>
#include<stdlib.h>
#include<graphics.h>
#define ROUND(a) ((int)(a+0.5))
void initialize_graph(void)
{
/* select a driver and mode that supports */
/* setalso background color */
/* for example: int gdriver=EGA; int gmode=EGAHI */
int gdriver=DETECT;
int gmode;
initgraph(&gdriver,&gmode,"\\tc2");
/* setbkcolor(BLUE); */
} /* end of initialize_graph */
void draw_pixel(w,q)
int w,q;
{
/* This function draws a pixel */
/* recorrelate to start from the lower left corner */
putpixel(w,480-q,RED);
} /* End of draw_pixel */
void scale(void)
{
int xf,yf,i,j,pixelcolor;
float sx,sy,newx,newy;
cleardevice();
printf("\nEnter the scaling point: \n");
printf("xf= "); scanf("%d",&xf);
printf("yf= "); scanf("%d",&yf);
printf("\nEnter the scaling factor: \n");
printf("sx= "); scanf("%d",&sx);
printf("sy= "); scanf("%d",&sy);
cleardevice();
line(250,300,400,450);
draw_pixel(xf,yf);
getch();
for(i=0;i<=getmaxx();i++)
{
for(j=0;j<=getmaxy();j++)
{
pixelcolor=getpixel(i,j);
if(pixelcolor==WHITE)
{
newx = xf+(i-xf)*sx;
newy = yf+(j-yf)*sy;
newx = ROUND(newx);
newy = ROUND(newy);
draw_pixel(newx,newy);
}
}
}
} /* End of scale */
void close_graph(void)
{
/* clean up */
closegraph();
} /* End of close_graph */
/* Start of main Program */
void main(void)
{
initialize_graph();
scale();
getch();
close_graph();
}
0 comments
Post a Comment