/*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 Cd. de Mexico*/ #include #include #include #include #include #include /*#include */ void arbol(int,int,int,int,int); int ind; float D=200,zlim=150,x2d,y2d,x2d1,y2d1,z3d; float f3d[][3]={1,1,1, 2,1,1, 2,2,1, 1,2,1, 1,1,1, 1,1,1.5, 2,1,1.5, 2,2,1.5, 1,2,1.5, 1,1,1.5, 1,1,1, 2,1,1, 2,1,1.5, 2,2,1.5, 2,2,1, 1,2,1, 1,2,1.5, 1,1,1.5, 1,1,1}; void main() { int z3; int gd=DETECT,gm; initgraph(&gd,&gm,""); randomize(); ind=1; while(kbhit()==0){ z3=random(zlim); setcolor(z3); arbol(random(600),random(100),z3,40,90); } getch(); closegraph(); } void arbol(int x3,int y3,int z3,int l,int an) { float x0,y0,x1,y1,x31,y31; 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)); x1=x31*D/(D-z3); y1=y31*D/(D-z3); // 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); arbol(x31,y31,z3,l/1.7,an-57); arbol(x31,y31,z3,l/1.7,an); arbol(x31,y31,z3,l/1.7,an+57); } }