I did that project I was talking about and I submitted for record too, so now I can show what was about. Is a simple program made in C++ wich have an object and you can handle it. You can move it left, right, up, down, you can scale it, you can rotate it after the left up corner, you can make his projections on both axes and you can shear it. About the method used to implement this I can tell you that I have used a class with methods, and the object points are read from another file. This should be a basic tutorial for those who are new using classes and 2D object manipulation. So lets start with the code. Text followed by // is a comment.
POINTS.IN //input file with points
20 20 // left top point
50 50 // right bottom point
PROJ2D.CPP
…
//GLOBAL VARIABLES
FILE *f;
int inData[20];//DEFINITION OF CLASSES AND STRUCTURES
typedef struct Point {
float x,y;
};class Object{
public: Point punct[10];
//CLASS PROPERTIES
float points, move, scale, angle, forf;
double aux_x;
//METHODS
~Object(); // DESTRUCTOR
Object(); //CONSTRUCTOR
void ReadPoints();
void Draw();
void Move(char);
void Scale(int);
void Rotate(float);
void Shear(float);
void Projection(char);
};
…
How you can see above we have defined our variables, our structer named Point and the class named Object. In the Object class we have defined our class properties or variables, how you like to say it and the methods wich we are going to write them out of the class. Now we are going to write the constructor and destructor for our class.
Object::Object()
{
ReadPoints();
move=2;
scale=1.1;
angle=0.03;
forf=0.03;
}Object::~Object()
{
delete &punct;
delete &points;
delete &move;
delete &scale;
delete ∠
delete &forf;
delete &aux_x;
}
How you can see our methods is like a function with the same name as the Class, but you can see that in front of the method name is the class name, that means class Object is the parent of that method. So in our constructor we assign values to our class properties and in the destructor we delete those variables to free our memorie. So next we are going to read our points from the input file.
void Object::ReadPoints()
{
points=0; //points counter
f=fopen(“points.in”,”r”);
while(!feof(f))
{
points++;
fscanf(f,”%f %f”,&punct[points].x, &punct[points].y);
}
fclose(f);
}
This method should be very simple, we open our input file to read it, and we get all points in the variable punct in the right coordonates (x and y). After that we can draw our object line by line, just like you can see in the next method.
void Object::Draw()
{
for(int i=1;i{
line(punct[i].x, punct[i].y, punct[i+1].x, punct[i+1].y);
}
line(punct[1].x, punct[1].y, punct[i].x, punct[i].y);
}
About the other methods I don’t have what to tell you about, they are using some mathematical functions and if you have some basic knowledge about programing, you wont have any problems. At the rotation method we apply a mathematical function for x coordonate and another mathematical function for y coordonate, for each point of the object.
void Object::Rotate(float side)
{
float rad = M_PI/180;
float angle = side*rad;for(int i=1;i<=points;i++)
{
aux_x=(double)(punct[i].x*cos(angle))-(double)(punct[i].y*sin(angle));
punct[i].y=(double)(punct[i].x*sin(angle))+(double)(punct[i].y*cos(angle));
punct[i].x=aux_x;
}
cleardevice();
Draw();
}
At the Shear method we have a mathematical function to move the object’s points, depending on what direction we want to shear and using our forf parameter.
void Object::Shear(float side)
{
int x,y;
for(int i=1;i<=points;i++)
{
x=punct[i].x;
y=punct[i].y;if(side==1)
punct[i].x=x+forf*y;
if(side==-1)
punct[i].y=y+forf*x;
if(side==2)
punct[i].x=x-forf*y;
if(side==-2)
punct[i].y=y-forf*x;
}
cleardevice();
Draw();
}
At the Move method we just have to see what in direction we want to move it, and after that we increment x or y or we decrement it, depending on the side.
void Object::Move(char side)
{
if(side==’W')
for(int i=1;i<=points;i++)
punct[i].y-=move;
if(side==’A')
for(int i=1;i<=points;i++)
punct[i].x-=move;
if(side==’S')
for(int i=1;i<=points;i++)
punct[i].y+=move;
if(side==’D')
for(int i=1;i<=points;i++)
punct[i].x+=move;
cleardevice();
Draw();
}
If we want to zoom in we have to multiply the coordonates with the scale parameter. And if we want to zoom out just divide the coordonates by the scale parameter.
void Object::Scale(int fs)
{
if(fs>0)
{
for(int i=1;i<=points;i++)
{
punct[i].x*=scale;
punct[i].y*=scale;
}
}
else
{
for(int i=1;i<=points;i++)
{
punct[i].x/=scale;
punct[i].y/=scale;
}
}
cleardevice();
Draw();
}
At projections we have to check on wich axes we want to make projections and after that the coordonates from the other axe we make them all zero;
void Object::Projection(char axis)
{
if(axis==’X')
for(int i=1;i<=points;i++)
{
punct[i].x*=1;
punct[i].y*=0;
}
else
for(int i=1;i<=points;i++)
{
punct[i].x*=0;
punct[i].y*=1;
}
cleardevice();
Draw();
}
What I should tell you is how you can handle the object. So lets see the main function.
void main()
{
//WE LOAD OUR GRAPHIC MODE
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, “C:\\BORLANDC\\BGI”);
errorcode = graphresult();
if(errorcode != grOk)
{
printf(“Graphics error: %s\n”, grapherrormsg(errorcode));
printf(“Press any key…”);
getch();
exit(1);
}
//MAIN
cleardevice();
Object a;
char key;
a.ReadPoints();
a.Draw();
do{
key=getch();
if(key==119) a.Move(‘W’); //move up
if(key==97) a.Move(‘A’); //move left
if(key==115) a.Move(‘S’); //move down
if(key==100) a.Move(‘D’); //move right
if(key==43) a.Scale(1); //zoom in
if(key==45) a.Scale(-1); //zoom out
if(key==60) a.Rotate(5); //rotate to left
if(key==62) a.Rotate(-5); //rotate to right
if(key==120) a.Shear(1); //right shear by x
if(key== 99) a.Shear(-1); //bottom shear by y
if(key==122) a.Shear(2); //left shear by x
if(key==101) a.Shear(-2); //upper shear by y
if(key==49) a.Projection(‘X’); //projection by x
if(key==50) a.Projection(‘Y’); //projection by y
if(key==114) { cleardevice(); a.ReadPoints(); a.Draw(); } //if you press r key you reset the object
}while(key!=27); // while we press ESC
closegraph(); //we close our graphic mode
}
So this is all, clean and simple, you can handle your own 2D object, try to make another object by writing another points in the input file, you can write as many points you want, but if you enter more than nine you should change in the class definiton.
|
|
download: 2D Object Manipulation (1.28KB) added: 18/12/2009 clicks: 336 description: open source code for 2d object manipulation |
Trackbacks/Pingbacks
Buy:Retin-A.Human Growth Hormone.Prevacid.Petcam (Metacam) Oral Suspension.Zyban.Lumigan.Mega Hoodia.Valtrex.Prednisolone.Synthroid.100% Pure Okinawan Coral Calcium.Arimidex.Zovirax.Actos.Accutane.Nexium….
Great Post!…
[...] I found your entry interesting thus I’ve added a Trackback to it on my weblog
[...]…
Blog…
[...] something about blog[...]…
slots free money sighn up bonus…
jobs bel terra casino…
free slots java 247…
free chip no deposit bonus sign up…
lisinopril with soma…
lisinopril with soma…
cheap soma injection…
canadian rxs soma…
soma watson brand…
buy prescription soma online…
valtrex and abreva…
valtrex discount…
viagra at walgreens…
best buy viagra…
play free casino games for fun…
playtech casinos no deposit required…
hampton casino bonus code…
rtg instant play no deposit bonus…
tramadol oral…
tramadol orders cod delivery companies…
free slots download…
vidio casino…
viagra 100mg generic…
viagra versand…
free promotion codes on casinos…
foxwoods casino bonusplay…
jackpot capitol free no deposit codes…
new no deposit bonus casinos…
is tramadol a pain killer…
tramadol and lunesta…
tramadol overnight delivery no perscription requir…
tramadol long term damage…
grand casino tunica…
clearwater casino washington state…
instant pokerboni…
play jack pot party slot free…
online casino mit startguthaben…
roulette casino game…
tramadol vs vicadin…
makr of tramadol…
free slots machine ca…
bingo free deposit…
free signup poker bonus…
casino royale for ipod torrent…
where can i purchase valtrex…
where can i purchase valtrex…
free betting money…
new online casino bonus codes…
free money bingo…
free casino codes coupons june july august…
cheap soma overnight…
soma online cash on delivery…
free casino game…
minesota casinos…
nodepositcasinobonus codes…
play twice the honey casino game on-line…
viplounge no deposit codes…
2010 rtg no deposit codes…
sun palace casino…
no deposit casino promo codes free cash 2010…
kasyno online darmowy bonus…
freeonlineslots lasvas…
new casinos free…
casino crush fourm no deposit…
generic valtrex no prescription…
valtrex in third trimester…
casino game online…
the best area to play in the casino…
soma with overnight fedex…
soma experiences…
cialis over the counter america…
viagra suppositories…
buy soma pill online…
soma c.o.d….
geneic soma…
medicine soma…
new redeem coupon rtg…
online casino games free play…
milfsex stories…
bingo buy game online viagra…
6 7 dihydroxybergamottin and tramadol…
tramadol and methadone…
order tramadol online using checking account…
amiodarone tramadol interaction…
snorting dilaudid and tramadol…
tramadol online shipped by ups…
microgaming no deposit bonus…
casino games that i can play offline…
jind mahi lyrics tramadol…
help i am withdrawing from tramadol…
viagra glasgow…
viagra recreational use…
buy pill prescription soma without…
buy pill prescription soma without…