Está en la página 1de 16

#include<winbgim.

h>
#include<stdlib.h>
#include<stdio.h>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <list>
#include <fstream>
#include <dir.h>
#include <math.h>

using namespace std;


/////FUNCIONES//////////////////////////////////////////////////////
int getMouseClick(int &x,int &y);
void clearMouseClick(void);
void OnClick(int ,int );
void boton(int x1,int y1,int x2,int y2,int c1,int c2,char *s);
void guardar(int, int, int);
int cartesiano();
float trasladar();
float escalar();
float rotar();
int principio();
int clics(int);
int calcular();
int pantalla();
int welcome();
int trazar();
///////////////////////////////////////////////////////////////////

///VARS_GLOB////////////////////////////////////////////////////////
list<float> lasx,lasy,flag;
float truco=1,btnn=0,dedo=1,bandera=0,cheka,parax=0, paray=0,basura=1,dibujar=1;
float PI=3.1416,teta=45,cuanto,mayorx=0,menorx=0, mayory=0, menory=0, Xf=0,
Yf=0;
int si=0;
int x,y,xb,yb;
////////////////////////////////////////////////////////////////////

int main(int argc, char *argv[])


{
cleardevice();
principio();
}

int welcome()
{
setcolor(19);
setbkcolor(15);
setlinestyle(10,10,10);
boton(300,0,2,0,0,0,"Transformaciones geometricas hecho por:");
boton(300,50,3,0,0,0,"Fátima Gpe.Torres Suárez");
boton(300,100,4,0,0,0,"Luis Flores Ramos");
boton(300,150,5,0,0,0,"Ismael Gacía Ordóñez");
}

int principio()
{

initwindow(1024,650);
setwindowtitle("Transformaciones Geometricas");
welcome();
delay(5000);
pantalla();
registermousehandler(WM_LBUTTONDOWN,OnClick);
trazar();
system("PAUSE");
closegraph();
return 0;
}

int limpiar()
{
if(dibujar==1)
{
pantalla();

ofstream clic;
clic.open("flag.txt");
if(!clic.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = flag.begin();
while( it != flag.end() )
{
flag.pop_back();
*it++;
}
clic.close();
remove("flag.txt");

ofstream x;
x.open("lasx.txt");
if(!x.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = lasx.begin();
while( it != lasx.end() )
{
lasx.pop_back();
*it++;
}
x.close();
remove("lasx.txt");

ofstream y;
y.open("lasy.txt");
if(!y.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = lasy.begin();
while( it != lasy.end() )
{
lasy.pop_back();
*it++;
}
y.close();
remove("lasy.txt");
//lasy.pop_back();
}
bandera=0;
//dibujar=0;

int getMouseClick(int &x,int &y)


{
int btn=0,botonclick=0;
clearMouseClick();
while(1)
{
if(ismouseclick(WM_LBUTTONDOWN))
{
botonclick = 1;
btn = WM_LBUTTONDOWN;
}
else
if(ismouseclick(WM_RBUTTONDOWN))
{
botonclick = 2;
btn = WM_RBUTTONDOWN;
}
delay(50);
getmouseclick(btn, x, y);
if(botonclick!=0)
return botonclick;
}
}

void clearMouseClick(void)
{
clearmouseclick(WM_LBUTTONDOWN);
clearmouseclick(WM_RBUTTONDOWN);
delay(50);
}

void boton(int x1,int y1,int x2,int y2,int c1,int c2,char *s)


{
setcolor(c1);
line(x1,y1,x1,y2);
line(x1,y1,x2,y1);
setcolor(c2);
line(x1,y2,x2,y2);
line(x2,y1,x2,y2);
outtextxy(x1+5, y1+5,s);
}

int cartesiano(void)
{
int x1=0,x2=850,y1=0,y2=650;
int mediox=x2/2,medioy=y2/2;
int intervalo = 30, longitud=4,secuencias=0,i;
char texto[5];
cleardevice();
rectangle(0,0,850,650);
line(mediox,y1,mediox,y2);
line(x1,medioy,x2,medioy);
secuencias=mediox/intervalo-4;
for(i=1;i<=secuencias;i++)
{
line(mediox-longitud,medioy-(intervalo*i),mediox+longitud,medioy-(intervalo*i));
outtextxy(mediox+longitud,medioy-(intervalo*i),itoa(intervalo*i,texto,10));
line(mediox-longitud,medioy+(intervalo*i),mediox+longitud,medioy+
(intervalo*i));
outtextxy(mediox+longitud,medioy+(intervalo*i),itoa(intervalo*i*-1,texto,10));
}
secuencias=medioy/intervalo;
for(i=1;i<=secuencias;i++)
{
line(mediox-(intervalo*i),medioy-longitud,mediox-(intervalo*i),medioy+longitud);
outtextxy(mediox-(intervalo*i),medioy-longitud-20,itoa(intervalo*i*-1,texto,10));
line(mediox+(intervalo*i),medioy-longitud,mediox+
(intervalo*i),medioy+longitud);
outtextxy(mediox+(intervalo*i),medioy-longitud-20,itoa(intervalo*i,texto,10));
}
return EXIT_SUCCESS;
closegraph();
}

void guardar(int x, int y, int band)


{

if(x!=0 && y!=0)


{
lasx.push_back(x);
lasy.push_back(y);

if(!lasx.empty() && !lasy.empty())


{
ofstream x;
ofstream y;
x.open("lasx.txt");
if(!x.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = lasx.begin();
while( it != lasx.end() )
{
x << *it++ << endl;
}
x.close();
}

y.open("lasy.txt");
if(!y.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = lasy.begin();
while( it != lasy.end() )
{
y << *it++ << endl;
}
y.close();
}
}

int clics(int clic)


{

flag.push_back(clic);
if(!flag.empty())
{
ofstream clik;
clik.open("flag.txt");
if(!clik.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = flag.begin();
while( it != flag.end() )
{
clik << *it++ << endl;
}
clik.close();
}
}
}

float trasladar()
{
if(dibujar==1)
{
list<float>::iterator itex = lasx.begin();
list<float>::iterator itey = lasy.begin();
list<float>::iterator clic = flag.begin();

if(cheka==0)
{
list<float>::iterator iteradorx = lasx.begin();
while( iteradorx != lasx.end() )
{
*iteradorx=*iteradorx+(cuanto);

if(!lasx.empty())
{
ofstream archivo;
archivo.open("lasx.txt");
if(!archivo.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = lasx.begin();
while( it != lasx.end() )
{
archivo << *it++ << endl;
}
archivo.close();
}
}
*iteradorx++;
}
}

if(cheka==1)
{

list<float>::iterator iteradory = lasy.begin();


while( iteradory != lasy.end() )
{
*iteradory=*iteradory+(cuanto);

if(!lasy.empty())
{
ofstream archivoy;
archivoy.open("lasy.txt");
if(!archivoy.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator ity = lasy.begin();
while( ity != lasy.end() )
{
archivoy << *ity++ << endl;
}
archivoy.close();
}
}
*iteradory++;
}
}

pantalla();

while( itex != lasx.end())


{
if(*clic==1)
{
lineto((int)*itex,(int)*itey);
}
if(*clic==2)
{
moveto((int)*itex,(int)*itey);
}
*itex++;
*itey++;
*clic++;
}
}
}

int calcular()
{

//////////////////////////////////////////////////////
list<float>:: iterator max= lasx.begin();
while(max != lasx.end())
{
if(*max>mayorx){ mayorx=*max;}
*max++;
}

//////////////////////////////////////////////////////
list<float>:: iterator min= lasx.begin();
menorx=*min;
while(min != lasx.end())
{
if(*min<menorx){ menorx=*min;}
*min++;
}

//////////////////////////////////////////////////////
list<float>:: iterator maxy= lasy.begin();
while(maxy != lasy.end())
{
if(*maxy>mayory){ mayory=*maxy;}
*maxy++;
}

//////////////////////////////////////////////////////
list<float>:: iterator miny= lasy.begin();
menory=*miny;

while(miny != lasy.end())
{
if(*miny<menory){ menory=*miny;}
*miny++;
}

//////////////////////////////////////////////////////

Xf=((mayorx-menorx)/2)+ menorx;
Yf=((mayory-menory)/2)+menory;

float escalar()
{

list<float>::iterator itex = lasx.begin();


list<float>::iterator itey = lasy.begin();
list<float>::iterator clic = flag.begin();

list<float>::iterator iteradorx = lasx.begin();


while( iteradorx != lasx.end() )
{
*iteradorx=(int)(*iteradorx * cuanto + Xf * (1 - cuanto));

if(!lasx.empty())
{
ofstream archivo;
archivo.open("lasx.txt");
if(!archivo.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = lasx.begin();
while( it != lasx.end() )
{
archivo << *it++ << endl;
}
archivo.close();
}
}
*iteradorx++;
}

list<float>::iterator iteradory = lasy.begin();


while( iteradory != lasy.end() )
{
*iteradory=*iteradory * cuanto + Yf * (1 - cuanto);

if(!lasy.empty())
{
ofstream archivoy;
archivoy.open("lasy.txt");
if(!archivoy.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator ity = lasy.begin();
while( ity != lasy.end() )
{
archivoy << *ity++ << endl;
}
archivoy.close();
}
}
*iteradory++;
}
pantalla();

while( itex != lasx.end())


{
if(*clic==1)
{
lineto((int)*itex,(int)*itey);
}
if(*clic==2)
{
moveto((int)*itex,(int)*itey);
}
*itex++;
*itey++;
*clic++;
}

float rotar()
{

list<float>::iterator itex = lasx.begin();


list<float>::iterator itey = lasy.begin();
list<float>::iterator clic = flag.begin();
list<float>::iterator iteradorx = lasx.begin();
list<float>::iterator iteradory = lasy.begin();
float a,b;

while( iteradorx != lasx.end() )


{
//*iteradory = (int)(Yf + ((*iteradorx - Xf)* sin(cuanto)) + ((*iteradory - Yf)*
cos(cuanto)));

a=*iteradorx-Xf;
b=*iteradory-Yf;
a=(int)a;
b=(int)b;
*iteradorx=(int)(a*cos(cuanto));
*iteradorx=(int)(Xf+*iteradorx - b *sin(cuanto));

*iteradory=(int)(b*sin(cuanto));
*iteradory=(int)(Yf+*iteradory +( a *cos(cuanto)));

if(!lasx.empty())
{
ofstream archivo;
archivo.open("lasx.txt");
if(!archivo.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator it = lasx.begin();
while( it != lasx.end() )
{
archivo << *it++ << endl;
}
archivo.close();
}
}

if(!lasy.empty())
{
ofstream archivoy;
archivoy.open("lasy.txt");
if(!archivoy.is_open())
{
cout << "No se puede guardar el archivo " << endl;
}
else
{
list<float>::iterator ity = lasy.begin();
while( ity != lasy.end() )
{
archivoy << *ity++ << endl;
}
archivoy.close();
}
}
*iteradory++;
*iteradorx++;

}
pantalla();

while( itex != lasx.end())


{
if(*clic==1)
{
lineto((int)*itex,(int)*itey);
}
if(*clic==2)
{
moveto((int)*itex,(int)*itey);
}
*itex++;
*itey++;
*clic++;
}

int pantalla()
{
setcolor(8);
setbkcolor(15);
setlinestyle(2,2,2);
rectangle(0,0,850,650);
cartesiano();
boton(2,0,2,0,0,0,"Define tu punto de inicio con click derecho");
boton(900,50,1005,80,15,0,"GIRAR ->");
boton(900,90,1005,110,15,0,"TRASLADAR +x");
boton(900,120,1005,150,15,0,"TRASLADAR -x");
boton(900,160,1005,190,15,0,"TRASLADAR +y");
boton(900,200,1005,230,15,0,"TRASLADAR -y");
boton(900,240,1005,270,15,0,"ZOOM +");
boton(900,280,1005,310,15,0,"ZOOM -");
boton(900,500,1005,520,15,0,"SALIR");
}

int trazar()
{
do
{
btnn = getMouseClick(x,y);
dibujar=1;

if(x>=0 && x<=850 && y>=0 && y<=650)


{

if(btnn==2 && bandera == 0)


{
moveto(x,y);
clics(2);
guardar(x,y,1);
bandera=1;
}

else
{
if(bandera==1 && btnn==1)
{
basura=0;
lineto(x,y);
clics(1);
guardar(x,y,1);

else
{
if(btnn==2 && bandera==1)
{
moveto(x,y);
if(basura==0)
{
clics(2);
lasx.push_back(x);
lasy.push_back(y);
}
basura=1;

}
}

}
else
rectangle(0,0,850,650);
if(kbhit())break;
}while(1);
}

void OnClick(int xb,int yb)


{

if((xb>=900 && xb<=1005) && (yb>=50 && yb<=80))


{
boton(900,50,1005,80,8,7,"GIRAR ->");
delay(300);
boton(900,50,1005,80,15,0,"GIRAR ->");
cuanto=(teta*PI)/180;
calcular();
rotar();

}
if((xb>=900 && xb<=1005) && (yb>=90 && yb<=110))
{
boton(900,90,1005,110,8,7,"TRASLADAR +x");
delay(300);
boton(900,90,1005,110,15,0,"TRASLADAR +x");
calcular();
cheka=0;
cuanto=10;
trasladar();

if((xb>=900 && xb<=1005) && (yb>=120 && yb<=150))


{
boton(900,120,1005,150,8,7,"TRASLADAR -x");
delay(300);
boton(900,120,1005,150,15,0,"TRASLADAR -x");
calcular();
cheka=0;
cuanto=-10;
trasladar();

if((xb>=900 && xb<=1005) && (yb>=160 && yb<=190))


{
boton(900,160,1005,190,8,7,"TRASLADAR +y");
delay(300);
boton(900,160,1005,190,15,0,"TRASLADAR +y");
calcular();
cheka=1;
cuanto=-10;
trasladar();

if((xb>=900 && xb<=1005) && (yb>=200 && yb<=230))


{
boton(900,200,1005,230,8,7,"TRASLADAR -y");
delay(300);
boton(900,200,1005,230,15,0,"TRASLADAR -y");
calcular();
cheka=1;
cuanto=10;
trasladar();

if((xb>=900 && xb<=1005) && (yb>=240 && yb<=270))


{
boton(900,240,1005,270,8,7,"ZOOM +");
delay(300);
boton(900,240,1005,270,15,0,"ZOOM +");
cuanto=1.1;
calcular();
escalar();

if((xb>=900 && xb<=1005) && (yb>=280 && yb<=310))


{
boton(900,280,1005,310,8,7,"ZOOM -");
delay(300);
boton(900,280,1005,310,15,0,"ZOOM -");
cuanto=0.9;
calcular();
escalar();

if((xb>=900 && xb<=1005) && (yb>=500 && yb<=520))


{
boton(900,500,1005,520,8,7,"SALIR");
delay(1000);
boton(900,500,1005,520,15,0,"SALIR");
calcular();
exit(1);
}
}

También podría gustarte