⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 111.txt

📁 在TC20环境下实现三维网格球的生成与旋转
💻 TXT
字号:
#include <graphics.h>  /*图形系统头文件*/
#include <conio.h>
#include <dos.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#define PI 3.1415926
int A=50;
float w=0.2;
static double yy=0.0,xx=0.0;
char ch;
void sphere(float R,int alfa,int beta)
{    /*R为球体半径,alfa、beta分别为半径与经纬线的夹角*/
 float x[4],y[4],z[4];  /*定义旋转变换前点坐标数组*/
 float x1[4],z1[4];    /*定义旋转变换后点坐标数组*/
 int i,j,k;
 float sx[4],sy[4];
 int shfill[10];  /*定义存放了5个顶点坐标序列的数组*/
 double yn;
 double a1,a2,b1,b2,c,d;
 c=alfa*PI/180.0;  /*每次旋转的角度*/
 d=beta*PI/180.0;
 cleardevice();
 for(j=0;j<180;j=j+20)
 {
   a1=j*PI/180.0;
   a2=(j+20)*PI/180.0;
   for(i=0;i<360;i=i+20)
   {
    b1=i*PI/180;
    b2=(i+20)*PI/180;
    x[0]=R*sin(a1)*cos(b1);   /*求出图形旋转前点的坐标*/
    y[0]=R*sin(a1)*sin(b1);
    z[0]=R*cos(a1);
    x[1]=R*sin(a2)*cos(b1);
    y[1]=R*sin(a2)*sin(b1);
    z[1]=R*cos(a2);
    x[2]=R*sin(a2)*cos(b2);
    y[2]=R*sin(a2)*sin(b2);
    z[2]=R*cos(a2);
    x[3]=R*sin(a1)*cos(b2);
    y[3]=R*sin(a1)*sin(b2);
    z[3]=R*cos(a1);
    for(k=0;k<4;k++)    /*求出图形旋转后点的坐标*/
    {
     x1[k]=x[k]*cos(c)-y[k]*sin(c);
     z1[k]=-x[k]*sin(c)*sin(d)-y[k]*cos(c)*sin(d)+z[k]*cos(d);
      sx[k]=300-x1[k];  /*将三维坐标转化为屏幕坐标*/
      sy[k]=250-z1[k];
  }
      yn=-(x1[2]-x1[0])*(z1[3]-z1[1])+(x1[3]-x1[1])*(z1[2]-z1[0]);
      if(yn>=0.0)   /*对可见部分进行画线,实现消隐*/
     {
      moveto(sx[0],sy[0]);
      lineto(sx[1],sy[1]);
      lineto(sx[2],sy[2]);
      lineto(sx[3],sy[3]);
      lineto(sx[0],sy[0]);
      shfill[0]=(int)sx[0],shfill[1]=(int)sy[0];
      shfill[2]=(int)sx[1],shfill[3]=(int)sy[1];
      shfill[4]=(int)sx[2],shfill[5]=(int)sy[2];
      shfill[6]=(int)sx[3],shfill[7]=(int)sy[3];
      shfill[8]=(int)sx[0],shfill[9]=(int)sy[0];
      if(i==20)    /*对一段经曲面进行填充为绿色*/
      { setfillstyle(1,1); }
      else
      setfillstyle(1,15);
      fillpoly(5,shfill);  /*用当前颜色填充多边形*/
     }
    }
  }
}

void main()
{
int gdrive=DETECT,gmode,k,t,i=0; /*自动探测图形显示器适配器种类*/
int size;
initgraph(&gdrive,&gmode,"");   /*初始化图形系统*/
setcolor(RED);   /*设置当前画笔颜色为红色*/
  for(k=1;k<=360;k=k+1)
  {
   sphere(40,k,k);   /*调用sphere函数*/
   delay(10000);
  }
getch();
  closegraph();  /*关闭图形系统*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -