You will require a.txt in current folder where your program is located
contents of a.txt
start 200
mover areg,one
mover breg,='4'
mover creg,='5'
mover breg,='6'
mover creg,='7'
add breg,areg
sub breg,creg
movem res,breg
one dc 1
res ds 5
print res
ltorg
='5'
='4'
loop equ one
end
Description :Transformations
are used to position objects, to shape objects, to change viewing
positions, and even to change how something is viewed.
There are 4 main types of transformations that one can perform in 2 dimensions:-translations,scaling,rotation,shearing.
Description :For each scan-line:
– Locate the intersection of the scan-line with the edges
– Sort the intersection points from left to right.
– Draw the interiors intersection points pairwise.
Code :
#include <conio.h>
#include <iostream.h>
#include <graphics.h>
#include <dos.h>
#include <stdlib.h>
//Declaration of class point
class point
{
public:
int x,y;
};
//class for polygon
class poly
{
private:
point p[20];
int inter[20],x,y;
int v,xmin,ymin,xmax,ymax;
public:
int c;
void read();
void calcs();
void display();
void ints(float);
void intsx(float);
void sort(int);
void sort(int,int);
};
//DEFINE READ FUNCTION
void poly::read()
{
cout<<”\n\t SCAN_FILL ALGORITHM”;
cout<<”\n Enter the no of vertices of polygon:”;
cin>>v;
if(v>2)
{
for(int i=0;i<v; i++) //ACCEPT THE VERTICES
{
cout<<”\nEnter the co-ordinate no. – “<<i+1<<” : “;
cout<<”\n\tx”<<(i+1)<<”=”;
cin>>p[i].x;
cout<<”\n\ty”<<(i+1)<<”=”;
cin>>p[i].y;
}
p[i].x=p[0].x;
p[i].y=p[0].y;
xmin=xmax=p[0].x;
ymin=ymax=p[0].y;
}
else
cout<<”\n Enter valid no. of vertices.”;
}
//FUNCTION FOR FINDING
void poly::calcs()
{ //MAX,MIN
for(int i=0;i<v;i++)
{
if(xmin>p[i].x)
xmin=p[i].x;
if(xmax<p[i].x)
xmax=p[i].x;
if(ymin>p[i].y)
ymin=p[i].y;
if(ymax<p[i].y)
ymax=p[i].y;
}
}
//DISPLAY FUNCTION
void poly::display()
{
int ch1;
char ch=’y';
float s,s2;
do
{
cout<<”\n\nMENU:”;
cout<<”\n\n\t1 . Solid Fill “;
cout<<”\n\n\t2 . Exit “;
cout<<”\n\nEnter your choice:”;
cin>>ch1;
switch(ch1)
{
case 1:
s=ymin+0.5;
delay(10);
cleardevice();
while(s<=ymax)
{
ints(s);
sort(s,1);
s++;
}
break;
case 2:
exit(0);
}
cout<<”\n\nDo you want to continue?: “;
cin>>ch;
}while(ch==’y’ || ch==’Y');
}
void poly::ints(float z) //DEFINE FUNCTION INTS
{
int x1,x2,y1,y2,temp;
c=0;
for(int i=0;i<v;i++)
{
x1=p[i].x;
y1=p[i].y;
x2=p[i+1].x;
y2=p[i+1].y;
if(y2<y1)
{
temp=x1;
x1=x2;
x2=temp;
temp=y1;
y1=y2;
y2=temp;
}
if(z<=y2&&z>=y1)
{
if((y1-y2)==0)
x=x1;
else
{
x=((x2-x1)*(z-y1))/(y2-y1);
x=x+x1;
}
if(x<=xmax && x>=xmin)
inter[c++]=x;
}
}
}
void poly::sort(int z,int w) //SORT FUNCTION
{
int temp,j;
for(int i=0;i<c;i++)
{
for(j=i+1;j<c;j++)
{
if(inter[i]>inter[j])
{
temp=inter[i];
inter[i]=inter[j];
inter[j]=temp;
}
}
}
if(w==1)
{
for(i=0;i<v;i++)
{
line(p[i].x,p[i].y,p[i+1].x,p[i+1].y);
}
delay(10);
for(i=0; i<c;i+=2)
{
delay(10);
line(inter[i],z,inter[i+1],z);
}
}
}
void main() //START OF MAIN
{
int gd=DETECT,gm,cl;
initgraph(&gd,&gm,”e:\\tc\\BGI”);
cleardevice();
poly x;
x.read();
x.calcs();
cleardevice();
cout<<”\n\tEnter the colour u want:(0-15)–>”; //Selecting colour
cin>>cl;
cleardevice();
setcolor(cl);
x.display();
closegraph(); //CLOSE OF GRAPH
cout<<”\n\nC=”<<x.c;
getch();
}
Bresenham’s algorithm: It is commonly used to draw lines on a computer screen, as it uses only integer addition, subtraction ,bit shifting all of which are very cheap operations in standard computer architectures.
DDA: Digital Differential Analyzer is a scan conversion line algorithm based on calculating either dy or dx. We sample the line at unit intervals in one coordinate & determine corresponding integer values nearest to the line path for the other coordinate. DDAs are used for rasterization of lines, triangles and polygons.