分享

圆柱透视图

 技多压身 2012-04-11

#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();
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多