手机分类
  导航: 电脑时代在线 · 程序设计 · C语言 · C语言编程实例
有问题吗?看 疑难解答 电脑术语

The Sun,the Earth,the Moon

 
硬件盘点
手机推荐
 
『The Sun,the Earth,the Moon』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2005-6-7 

   本程序利用动画方式展示了地球绕太阳旋转,月亮绕地球旋转的天文现象,其动画的实现方式为边画边擦。

#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
double Earthx,Earthy,Circlex,Circley;  /*Earthx,Earthy)表示地球的当前圆心,(Circlex,Circley)表示运行物得当前圆心*/    
void drawnrun(int x,int y,double i,int r,int runr,int color)  /*画星球*/
{
  setcolor(color);
  setfillstyle(SOLID_FILL,color);
  i=(i*1.74444)/100;         /*3.14/180=1.74444e-2*/
  Circlex=runr*cos(i)+x;
  Circley=runr*sin(i)+y;
  fillellipse(Circlex,Circley,r,r);
}
void eraserun(int x,int y,double i,int r,int runr)  /*擦除星球*/
{
  setfillstyle(SOLID_FILL,BLACK);
  i=(i*1.74444)/100;
  Circlex=runr*cos(i)+x;
  Circley=runr*sin(i)+y;
  setcolor(BLACK);
  fillellipse(Circlex,Circley,r,r);
}
void putstar(void)            /*在天空画星星*/
{
  int i,dotx,doty,h,w,color;
  w=640;
  h=480;
  for(i=0;i<150;i++)
  {
    dotx=random(w-1);
    doty=random(h-1);
    color=random(16);
    putpixel(dotx,doty,color);      /*小星星*/
    circle(dotx+1,doty+1,1);        /*大星星*/
  }
}
main()
{
  int gd=DETECT,gm;
  int Circlex1,Circley1,r;
  int i,j,k,ks;
  initgraph(&gd,&gm," ");
  Circlex1=getmaxx()/2;
  Circley1=getmaxy()/2;
  cleardevice();
  setcolor(BLUE);
  settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);
  outtextxy(1,1,"Sun,Earth,Moon");
  setfillstyle(SOLID_FILL,YELLOW);
  fillellipse(Circlex1,Circley1,35,35);        /*画太阳*/
  setcolor(RED);
  outtextxy(Circlex1-16,Circley1-10,"SUN");
  putstar();
  for(j=1;j<3;j++)                         /*地球一共转3圈*/
  {
    ks=0;
    for(i=0;i<=360;i++)
    {

      delay(200);
      drawnrun(Circlex1,Circley1,i,20,180,LIGHTBLUE);       /*画地球*/
      Earthx=Circlex;
      Earthy=Circley;
      for(k=1;k<12;k++)
      {
        ks+=1;
        drawnrun(Earthx,Earthy,ks,5,50,WH99vE);         /*画月亮*/
        if(kbhit())   break;
        else  delay(800);
        eraserun(Earthx,Earthy,ks,5,50);       /*擦月亮*/
      }  
      eraserun(Circlex1,Circley1,i,15,180);    /*擦地球*/
      if(kbhit())    break;    
    }
  }
  getch();
  closegraph(); 
}

   在编完以上程序后,我本想改一改,但遇上了一些困难,如:如何让月亮周期盈亏;若加上其他行星,又如何处理他们的多卫星。。。。
希望有人给与帮助。

[1] [2] 下一页  


如果您有什么疑问,可以至论坛提出或者解答他人的疑问   返回页面顶部

】【关闭窗口
·上一篇教程:
·下一篇教程:
·导航: 电脑时代在线 · 程序设计 · C语言 · C语言编程实例
相关文章
 
搞笑自拍|图片故事|美女图库|体坛宝贝|明星爆料|世界奇观|风光摄影|历史回忆|大千世界
Photshop超炫图片
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部  
网站文本地图
  版权所有:电脑时代在线 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2007 www.PCvz.com online services. all rights reserved. 蜀ICP备05015578
Template designed by LaoJiang. Optimized for 1024x768 to Firefox,Opera and MS-IE. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光