/*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); int ind,w0,w1,w2; float D=500,zlim=20,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); w0=70+random(27); w1=95+random(37); w2=127+random(37); arbol(random(600),random(100),z3,40,90,0); } 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); arbol(x31,y31,z31,l/1.45,an-w0,an1+11); arbol(x31,y31,z31,l/1.45,an+w1,an1+7); arbol(x31,y31,z31,l/1.45,an+w2,an1-11); } }