sábado, 22 de marzo de 2008

Programa de Recorte de Lineas

//Este programa esta basado en el algoritmo Cyrus Beck que busca los parametros para la ecuacion de la linea en forma parametrica sacando dichos parametro en cada arista del area de corte podremos obtener el punto de interseccion con cada arsita de dicha area*/


#include
#include
#include
int x1=10,y1=10,x2=40,y2=40,a,b,c,d,out1,out2,out3;
double t1,t2,t3,t4,pta,ptb;

void linea_out(int u, int v, int w, int z)
{
if(ux2vy2) {out1=1;
}

if(wx2zy2) {out2=1;}

if(out1==1&&out2==1)
{printf("Los ptos. de la linea estan fuera del area de recorte\ncalculamos intersecciones prolongando la linea"); getch(); }

if(out1==1&&out2!=1 out1!=1&&out2==1)
{printf("La linea esta parcialmente dentro de la reion de corte\calculamos intersecciones prolongando la linea");
getch();
}
if(out1!=1&&out2!=1)
{printf("La linea esta completamente dentro del area de recorte");
getch();
out3=1;}
}

void ptos_interseccion(float parametro)
{
pta=a+parametro*(c-a);
ptb=b+parametro*(d-b); }

void calcula_t(int a1, int b1, int c1, int d1)
{
t1= (-(a1-x1))/(c1-a1);
t2= (a1-x2)/(-(c1-a1));
t3= (-(b1-y1))/(d1-b1);
t4= (b1-y2)/(-(d1-b1)); }

main(){
clrscr();
window(x1,y1,x2,y2);
textcolor(9);
textbackground(2);
//gotoxy(40,20);
printf("Programa de recorte\nVenta de recorte definida en esquina superior izq(10,10)\n esquina inferior derecha (40,40)");
printf("\nDame las coordenadas de 2 ptos separados por una coma x1,y1,x2,y2\n");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);

linea_out(a,b,c,d);

if(out3!=1)
{
calcula_t(a,b,c,d);
printf("\nParametros\n%f %f %f %f \n",t1,t2,t3,t4);
ptos_interseccion(t1); printf("\nInterseccion para la arista derecha es: %f %f ",pta,ptb);
ptos_interseccion(t2); printf("\nInterseccion para la arista izq es: %f %f ",pta,ptb);
ptos_interseccion(t3); printf("\nInterseccion para la arista de abajo es: %f %f ",pta,ptb);
ptos_interseccion(t4); printf("\nInterseccion para la arista de arriba es: %f %f ",pta,ptb);
}



getch();
return 0;
}

No hay comentarios: