📄 sunearth.c
字号:
/*
本程序利用动画方式展示了地球绕太阳旋转,月亮绕地球旋转的天文现象,其动画的实现方式为边画边擦。
*/
#include "gui.h"
#include "math.h"
double Earthx, Earthy, Circlex, Circley; /*Earthx,Earthy)表示地球的当前圆心,(Circlex,Circley)表示运行物得当前圆心*/
void drawnrun( int x, int y, double i, int r, int runr, int color ) /*画星球*/
{
GUI_SetColor( color );
i = ( i * 1.74444 ) / 100; /*3.14/180=1.74444e-2*/
Circlex = runr * cos(i) + x;
Circley = runr * sin(i) + y;
GUI_FillEllipse( Circlex, Circley, r, r );
}
void eraserun( int x, int y, double i, int r, int runr ) /*擦除星球*/
{
i = ( i * 1.74444 ) / 100;
Circlex = runr * cos(i) + x;
Circley = runr * sin(i) + y;
GUI_SetColor( GUI_BLACK );
GUI_FillEllipse( Circlex, Circley, r, r );
}
void putstar( void ) /*在天空画星星*/
{
int i, j, dotx, doty, n = 1;
for( i=0; i<320; i += n )
{
for( j=0; j<240; j += n )
{
if( n > 7 )
n =1;
else
n += 2;
GUI_DrawPixel( i, j );
}
}
}
void Earth( void )
{
int Circlex1, Circley1, r;
int i, j, k, ks;
Circlex1 = 160;
Circley1 = 120;
GUI_SetBkColor( GUI_BLACK );
GUI_SetColor( GUI_BLUE );
GUI_Clear();
GUI_DispStringAt( "Sun,Earth,Moon", 1, 1 );
GUI_SetColor( GUI_YELLOW );
GUI_FillEllipse( Circlex1, Circley1, 35, 35 ); /*画太阳*/
GUI_SetBkColor( GUI_YELLOW );
GUI_SetColor( GUI_RED );
GUI_DispStringAt( "SUN", Circlex1-8, Circley1-8 );
GUI_SetBkColor( GUI_BLACK );
putstar();
while( 1 )
{
ks = 0;
for( i=0; i<=360; i++ )
{
drawnrun( Circlex1, Circley1, i, 20, 90, GUI_LIGHTBLUE ); /*画地球*/
Earthx = Circlex;
Earthy = Circley;
for( k=1; k<12; k++ )
{
ks += 1;
drawnrun( Earthx, Earthy, ks, 5, 30, GUI_WHITE ); /*画月亮*/
GUI_Delay( 15 );
eraserun( Earthx, Earthy, ks, 5, 30 ); /*擦月亮*/
}
eraserun( Circlex1, Circley1, i, 20, 90 ); /*擦地球*/
}
}
}
/*
在编完以上程序后,我本想改一改,但遇上了一些困难,
如:如何让月亮周期盈亏;若加上其他行星,又如何处理他们的多卫星。。。。
希望有人给与帮助。
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -