#include "graphics.h"
#include "math.h"
#define pi 3.141592653
void Line(double x0,double y0,double x1,double y1,int color)
{
double dx,dy,ep,k;
double x,y,xi,yi;
dx=x1-x0;
dy=y1-y0;
x=x0;
y=y0;
if(abs(dx)>abs(dy))ep=abs(dx);
else ep=abs(dy);
xi=(double)dx/(double)ep;
yi=(double)dy/(double)ep;
for(k=0;k<=ep;k++)
{
putpixel((double)(x+0.5),(double)(y+0.5),color);
x+=xi;
y+=yi;
}
}
main()
{
double x0,x1,x2,x3,y0,z0,z1,z2,z3,w,d;
double xx2,yy2,xx3,yy3,d1,d2,dx,dz;
int gd=DETECT,gm;
initgraph(&gd,&gm,"\\tc");
d=20;y0=20;
x0=160;x1=x0/(1+y0/d); /*透视坐标变换公式*/
z0=400;z1=z0/(1+y0/d); /*透视坐标变换公式*/
for(w=0;w<360;w=w+10)
{
x2=x0+60*sin(w*pi/180);
z2=z0-60*cos(w*pi/180);/*旋转直线 */
x3=x1+18*sin(w*pi/180);
z3=z1-18*cos(w*pi/180);/*透视直线 */
xx2=x0+60*sin((w+10)*pi/180);
yy2=z0-60*cos((w+10)*pi/180);/* 旋转直线 */
xx3=x1+18*sin((w+10)*pi/180);
yy3=z1-18*cos((w+10)*pi/180);/*透视直线 */
Line(x2,z2,x3,z3,11);/*连线*/
Line(x2,z2,xx2,yy2,6);/* 绘圆柱上端椭圆*/
Line(x3,z3,xx3,yy3,6); /* 绘圆柱下端椭圆 */
}
getch();
closegraph();
}