/*graficacion en 3d Perspectiva conica D distancia del observador (x3d,y3d,z3d) punto en 3d (x2d,y2d) punto en 2d x2d=y3d*D/(D-z3d) y2d=x3d*D/(D-z3d) Fernando Galindo Soria 19/iv/98 19/vii/2002 Cd. de Mexico 5 www.fgalindosoria.com fgalindo@ipn.mx www.laredi.com*/ #include #include #include #include #include #include #include void arbol(int,int,int,int,int,int); int ind; float D=80,zlim=20,x2d,y2d,x2d1,y2d1,z3d; float f3d[][3]={10,10,10, 300,10,10, 300,50,50, 10,50,50, 10,10,10, 50,300,15, 300,300,15, 300,300,15, 50,300,15, 50,300,15, 50,300,10, 300,300,10, 300,300,15, 300,300,15, 300,300,10, 50,300,10, 50,300,15, 50,300,15, 50,300,10}; void main() { int z3,i; int gd=DETECT,gm; initgraph(&gd,&gm,""); randomize(); ind=1; while(kbhit()==0){ setcolor(15); for (i=0;i<4;i++) line(f3d[i][0]*D/(D-f3d[i][2]),300+f3d[i][1]*D/(D-f3d[i][2]),f3d[i+1][0]*D/(D-f3d[i+1][2]),300+f3d[i+1][1]*D/(D-f3d[i+1][2])); z3=random(zlim); setcolor(z3); arbol(random(600),random(100),z3,40,90,0); if(random(10)==3){delay(500);cleardevice();} } getch(); closegraph(); } void arbol(int x3,int y3,int z3,int l,int an,int an1) { float x0,y0,x1,y1,x31,y31,z31; if(kbhit()==0) if (l > ind ) { x0=x3*D/(D-z3); y0=y3*D/(D-z3); x31=x3-(l*cos(an/57.29578)); y31=y3-(l*sin(an/57.29578)); z31=z3-(l*tan(an1/57.29578)); x1=x31*D/(D-z31); y1=y31*D/(D-z31); // printf("\n %d %d %d %d %d %d %d %d %d ",x3,y3,z3,l,an,x0,y0,x1,y1); line(x0,y0+326,x1,y1+326); delay(1); arbol(x31,y31,z31,l/1.7,an-47,an1+5); arbol(x31,y31,z31,l/1.7,an,an1+7); arbol(x31,y31,z31,l/1.7,an+47,an1-5); } }