太阳系行星轨道及运行.docx

上传人:b****6 文档编号:3881984 上传时间:2022-11-26 格式:DOCX 页数:19 大小:181.13KB
下载 相关 举报
太阳系行星轨道及运行.docx_第1页
第1页 / 共19页
太阳系行星轨道及运行.docx_第2页
第2页 / 共19页
太阳系行星轨道及运行.docx_第3页
第3页 / 共19页
太阳系行星轨道及运行.docx_第4页
第4页 / 共19页
太阳系行星轨道及运行.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

太阳系行星轨道及运行.docx

《太阳系行星轨道及运行.docx》由会员分享,可在线阅读,更多相关《太阳系行星轨道及运行.docx(19页珍藏版)》请在冰豆网上搜索。

太阳系行星轨道及运行.docx

太阳系行星轨道及运行

太阳系行星轨道及运行

动画演示

本程序对太阳系行星、卫星运行情况进行动画演示。

具有以下功能:

1.可单独(或全部)显示或隐藏某个天体、运行轨道、天体名称。

2.可调节演示速度、画面比列、观察角度(从天球赤道到天球北极观察太阳系)。

3.可将某个天体(例如月亮)设置为屏幕中间静止不动的天体,观察其他天体相对于该天体运行的情况。

本程序改进版见:

太阳系行星轨道及运行-3D立体动画演示

通过设置不同的参数,可得到许多美丽而奇妙的图案,如下:

'需在窗体放置以下3个控件,所有控件均采用默认设置:

'   Picture1,Command1,Timer1

'注意:

在属性窗口将Command1的Index属性设置为0

'其次,为窗体添加一个名为mFast的菜单,再为mFast添加一个名为mmFast的下级子菜单,并将mmFast的索引设置为0。

'   即:

mmFast是以序号0开头的菜单数组控件的第一个。

'以下是窗体代码,在VB6.0调试通过:

DimctD()AstyD,ctDsAsLong,ctPAsSingle,ctCenterAsLong

DimctBiAsSingle,ctVAsSingle,ctTrackAsBoolean,ctBWAsLong

DimctSeeJAsLong,ctSeeBiAsSingle,ctSetAsMenuSet

'定义表示天体的数据类型

PrivateTypetyD

CapAsString   '天体名称

rAsLong       '天体半径(像素,下同)

aAsSingle     '轨道:

横半径

bAsSingle     '轨道:

纵半径

cAsSingle     '轨道:

焦点

eAsSingle     '轨道:

偏心率

IsHuiAsBoolean'是否彗星

FatherAsLong  '父天体序号:

轨道焦点上的天体

SeAsLong      '颜色

VAsSingle     '运行角速度

JiaoAsSingle  '某时刻的与父天体连线角度

XAsSingle     '天体当前坐标

YAsSingle

xUpAsSingle   '上一时刻坐标

yUpAsSingle

VisibleAsBoolean'是否显示:

球体

ShowCapAsBoolean'是否显示:

标题

GuiDaoAsBoolean'是否显示:

轨道

EndType

EnumMenuSet

'以下为选项菜单标示

ms_All=-2

ms_NoAll=-1

'以下为按钮标示

ms_RunStop=0'开始/暂停

ms_Step       '步进,下一位置

ms_UnRun      '后退

ms_Track      '轨迹:

显示/隐藏

ms_DefSet     '默认设置

ms_Center     '参照系

ms_Visible    '天体:

显示/隐藏

ms_ShowCap    '天体名称

ms_GuiDao     '轨道

ms_Bi         '缩放比

  ms_V          '速度

ms_SeeJ       '视角

EndEnum

PrivateSubForm_Load()

Me.ScaleMode=3:

Me.Caption="太阳系行星运行演示"

mFast.Visible=False:

ctP=3.1415926

Timer1.Interval=25:

Timer1.Enabled=True

CallInit

'Me.WindowState=vbMaximized'最大化窗体

'窗体大小为屏幕的3/4,居中

Me.MoveScreen.Width*0.1,Screen.Height*0.1,Screen.Width*0.8,Screen.Height*0.8

EndSub

PrivateSubForm_Resize()

DimIAsLong,LAsSingle,TAsSingle,HAsSingle,H1AsSingle,WAsSingle

'设置控件位置

H1=Me.TextHeight("A"):

L=H1*0.3:

T=L

L=3

ForI=0ToCommand1.Count-1

W=Me.TextWidth(Command1(I).Caption&"ab")

Command1(I).MoveL,T,W,H1*2

L=L+W+3

Next

T=T*2+Command1(0).Height:

H=Me.ScaleHeight-T

IfH>0ThenPicture1.Move0,T,Me.ScaleWidth,H

'将Picture1的中心设置为坐标原点

Picture1.ScaleMode=3

Picture1.ScaleLeft=-Picture1.ScaleWidth*0.5

Picture1.ScaleTop=-Picture1.ScaleHeight*0.5

Picture1.Cls

CallRun1

EndSub

PrivateSubInit()

'初始化天体参数

  DimIAsLong,VAsSingle,JAsSingle

ctBW=0'40'四周边界空白区,仅用于调试。

调试完毕应设为0。

调试代码****

Picture1.AutoRedraw=True

Picture1.BackColor=&H220000'&HFFFFFF'

ctCenter=0:

ctBi=1:

ctV=1'参照系(位于中心的天体),缩放比列,速度

ctSeeJ=30:

ctSeeBi=ctSeeJ/90'视点角度,视角比

ctTrack=False'不显示运动轨迹(不是轨道)

'添加按钮

KjClsCommand1

KjAddCommand1,"始/停(&K)",ms_RunStop,"天体的运动状态:

开始/暂停"

KjAddCommand1,"进(&J)",ms_Step,"步进,运行到下一位置"

KjAddCommand1,"退(&T)",ms_UnRun,"步进,后退到上一位置"

KjAddCommand1,"迹(&A)",ms_Track,"运动轨迹:

显示/隐藏"

KjAddCommand1,"默(&D)",ms_DefSet,"将所有参数恢复为默认设置"

KjAddCommand1,"参照系(&C)",ms_Center,"设置参照系(位于中心的天体)"

KjAddCommand1,"天体(&X)",ms_Visible,"天体:

显示/隐藏"

KjAddCommand1,"名称(&M)",ms_ShowCap,"天体名称:

显示/隐藏"

KjAddCommand1,"轨道(&G)",ms_GuiDao,"天体运行轨道:

显示/隐藏"

KjAddCommand1,"速度(&V)",ms_V,"设置速度"

KjAddCommand1,"视角(&L)",ms_SeeJ,"设置视点角度"

KjAddCommand1,"缩放(&S)",ms_Bi,"设置缩放比列"

'添加天体(演示比列状态下),半径以100像素为标准

'参数依次是:

名称,父天体名称,天体半径,轨道长半轴,轨道偏心率,运动角速度,天体颜色,初始角度,彗星否

  ctDs=-1:

ReDimctD(0)

AddCircle"太阳","",22,2,0,ctP*0.008,RGB(255,200,0)

AddCircle"水星","",5,0.5,0.206,ctP*0.03,&H999999

AddCircle"金星","",9,0.8,0.0068,ctP*0.018,&H55AAAA

AddCircle"地球","",10,1.2,0.0167,ctP*0.01,RGB(0,0,255)

AddCircle"月亮","地球",4,0.2,0,ctP*0.06,&H888888

AddCircle"嫦娥1号","月亮",2,0.06,0,ctP*0.12,&HCCCCCC

AddCircle"火星","",6,1.8,0.093,ctP*0.005,&H1155FF

AddCircle"火卫1","火星",3,0.1,0,ctP*0.1,&HFFFF00,ctP*2*0.3

AddCircle"火卫2","火星",3,0.15,0,ctP*0.1,&H7777FF,ctP*2*0.7

AddCircle"木星","",16,3,0.0483,ctP*0.003,&HEEDDCC

AddCircle"木卫1","木星",2,0.25,0,ctP*0.05,&H883487,ctP*2*0.2

AddCircle"木卫2","木星",2,0.3,0,ctP*0.035,&H348888,ctP*2*0.4

AddCircle"木卫3","木星",3,0.35,0,ctP*0.03,&HAA34CC,ctP*2*0.6

AddCircle"木卫4","木星",4,0.45,0,ctP*0.02,&H888888,ctP*2*0.8

AddCircle"土星","",14,5,0.056,ctP*0.002,&H5599FF

AddCircle"土卫6","土星",4,0.25,0,ctP*0.055,&H99EEEE

AddCircle"天王星","",12,6.5,0.0461,ctP*0.0015,&HFFCCCC

AddCircle"天卫3","天王星",3,0.2,0,ctP*0.05,&H33FF88,ctP*2*0.5

AddCircle"天卫4","天王星",3,0.3,0,ctP*0.035,&HFF3311,ctP*2*0.8

AddCircle"海王星","",12,9,0.0097,ctP*0.001,&HFF7766

AddCircle"海卫1","海王星",3,0.25,0,-ctP*0.03,&H882388

AddCircle"哈雷彗星","",2,5.5,0.83,ctP*0.0012,&H777777,ctP*1,True

  CallForm_Resize

EndSub

PrivateSubCommand1_Click(IndexAsInteger)

DimIAsLong,JAsLong,nStrAsString,ZuAsVariant

DimnSelAsLong,nAllAsLong,nNoAsLong

ctSet=Val(Command1(Index).Tag)'得到按钮标示

  KjClsmmFast                    '清除菜单

'装载快捷菜单,并勾选选定项目

SelectCasectSet

Casems_DefSet:

CallInit:

Run1:

ExitSub                     '默认设置

Casems_RunStop:

Timer1.Enabled=NotTimer1.Enabled:

ExitSub'开始/暂停

Casems_Track:

  ctTrack=NotctTrack:

Picture1.Cls:

CallRun1'保留运动轨迹

Casems_Step'步进,前进到下一位置

IfNotTimer1.EnabledThenRun1True

Timer1.Enabled=False

Casems_UnRun'步进,后退到下一位置

IfNotTimer1.EnabledThenRun1True,True

Timer1.Enabled=False

Casems_Bi'缩放比列

Zu=Array(0.1,0.2,0.3,0.4,"-",0.5,0.6,0.7,0.8,0.9,"-",1,1.2,1.5,1.8,2,3,5,8,10)

KjAddZummFast,Zu,ctBi,"倍":

GoToShow1'添加数组菜单,并勾选ctBi

Casems_SeeJ'视点角度

Zu=Array("90度(天球北极)","80度","70度","60度","50度","45度","40度","30度","20度","15度","10度","5度","0度(天球赤道)")

KjAddZummFast,Zu,ctSeeJ:

GoToShow1'添加数组菜单,并勾选ctSeeJ

Casems_V'速度

Zu=Array(0.1,0.2,0.3,0.4,"-",0.5,0.6,0.7,0.8,0.9,"-",1,1.5,2,2.5,3,4,5,7.5,10)

KjAddZummFast,Zu,ctV,"倍":

GoToShow1

CaseElse  '装载天体名称

ForI=0ToctDs

J=Ji(I)'天体I的级别

KjAddmmFast,"&"&I&""&String(J*2,"")&ctD(I).Cap

Next

EndSelect

'勾选选定天体

SelectCasectSet

Casems_Center:

mmFast(ctCenter).Checked=True:

GoToShow1'参照系(中心天体)

Casems_ShowCap'显示天体名称

ForI=0ToctDs:

mmFast(I).Checked=ctD(I).ShowCap:

Next

Casems_Visible'天体是否可见

ForI=0ToctDs:

mmFast(I).Checked=ctD(I).Visible:

Next

Casems_GuiDao'轨道

ForI=0ToctDs:

mmFast(I).Checked=ctD(I).GuiDao:

Next

CaseElse:

ExitSub

EndSelect

KjAddmmFast,"-"

nAll=KjAdd(mmFast,"全选",ms_All)

nNo=KjAdd(mmFast,"全不选",ms_NoAll)

ForI=0ToctDs

IfmmFast(I).CheckedThennSel=nSel+1

Next

IfnSel=0ThenmmFast(nNo).Checked=True:

mmFast(nNo).Enabled=False

IfnSel=ctDs+1ThenmmFast(nAll).Checked=True:

mmFast(nAll).Enabled=False

Show1:

Command1(Index).BackColor=&HFFCCCC'将选中按钮设置为淡蓝色

Me.PopupMenumFast,,Command1(Index).Left,Command1(Index).Top+Command1(Index).Height-3

Command1(Index).BackColor=Me.BackColor

EndSub

PrivateSubmmFast_Click(IndexAsInteger)

'通过快捷菜单设置天体有关参数

DimnTagAsMenuSet,IAsLong,TFAsBoolean

nTag=Val(mmFast(Index).Tag)'菜单标示:

ms_All全选,ms_NoAll全不选

SelectCasectSet'ctSet:

按钮标示,在Command1_Click中设置

Casems_V'速度

ctV=Val(mmFast(Index).Caption)

Casems_SeeJ'视点角度

ctSeeJ=Val(mmFast(Index).Caption)'视点角度

ctSeeBi=ctSeeJ/90'视角比

ForI=0ToctDs:

ctD(I).xUp=0:

ctD(I).yUp=0:

Next

Casems_Bi'缩放比列

ctBi=Val(mmFast(Index).Caption)

ForI=0ToctDs:

ctD(I).xUp=0:

ctD(I).yUp=0:

Next

Casems_Center'参照系(中心天体)

ctCenter=Index

ForI=0ToctDs:

ctD(I).xUp=0:

ctD(I).yUp=0:

Next

Casems_ShowCap'显示名称

IfIndex<=ctDsThen

ctD(Index).ShowCap=NotctD(Index).ShowCap

Else

TF=nTag=ms_All

ForI=0ToctDs:

ctD(I).ShowCap=TF:

Next

EndIf

Casems_Visible'天体是否可见

IfIndex<=ctDsThen

ctD(Index).Visible=NotctD(Index).Visible

Else

TF=nTag=ms_All

ForI=0ToctDs:

ctD(I).Visible=TF:

Next

EndIf

Casems_GuiDao'轨道

IfIndex<=ctDsThen

ctD(Index).GuiDao=NotctD(Index).GuiDao

Else

TF=nTag=ms_All

ForI=0ToctDs:

ctD(I).GuiDao=TF:

Next

EndIf

EndSelect

Picture1.Cls

CallRun1

EndSub

PrivateSubAddCircle(nNameAsString,nFatherAsString,rAsLong,aAsSingle,eAsSingle,VAsSingle,_

OptionalSeAsLong=255,OptionalJiaoAsSingle,OptionalIsHuiAsBoolean)

'添加一个天体,参数依次是:

'   名称,父天体名称,天体半径,轨道长半轴,轨道偏心率,运动角速度,天体颜色,初始角度,彗星否

DimIAsLong,JAsLong

a=a*100'半径以100像素为标准

ctDs=ctDs+1:

ReDimPreservectD(ctDs)

'设置父天体编号

ForI=0ToctDs-1

IfLCase(ctD(I).Cap)=LCase(nFather)ThenctD(ctDs).Father=I:

ExitFor

Next

ctD(ctDs).Cap=nName:

  ctD(ctDs).r=r:

   ctD(ctDs).a=a

ctD(ctDs).c=a*e:

    ctD(ctDs).b=Sqr(a^2-ctD(ctDs).c^2)

ctD(ctDs).IsHui=IsHui:

ctD(ctDs).V=V:

    ctD(ctDs).Se=Se

ctD(ctDs).xUp=0:

      ctD(ctDs).yUp=0:

  ctD(ctDs).Visible=True

ctD(ctDs).GuiDao=True

Randomize

IfJiao=0ThenctD(ctDs).Jiao=Rnd*ctP*2ElsectD(ctDs).Jiao=Jiao

EndSub

PrivateFunctionKjAddZu(Kj,ZuAsVariant,ByValCheckStrAsString,OptionalSameStrAsString)

'添加一个数组菜单,并勾选标题为CheckStr的条目

DimIAsLong,JAsLong,nCapAsString

IfLeft(CheckStr,1)="."ThenCheckStr="0"&CheckStr

ForI=LBound(Zu)ToUBound(Zu)

nCap=Zu(I)

IfLeft(nCap,1)="."ThennCap="0"&nCap

IfnCap="-"ThenJ=KjAdd(Kj,nCap)ElseJ=KjAdd(Kj,nCap&SameStr)

'IfLCase(CheckStr)=LCase(nCap)ThenKj(J).Checked=True

IfVal(CheckStr)=Val(nCap)ThenKj(J).Checked=True

Next

EndFunction

PrivateFunctionKjAdd(Kj,nCapAsString,OptionalnTagAsString,OptionalnNoteAsString)AsLong

'为数组控件添加一个成员,返回新添加的成员序号

DimIAsLong

I=Kj.Count-1

IfKj(I).Caption<>""ThenI=I+1:

LoadKj(I)

OnError

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1