📄 111.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 + -