天体运行程序代码.docx

上传人:b****2 文档编号:24130639 上传时间:2023-05-24 格式:DOCX 页数:26 大小:26.49KB
下载 相关 举报
天体运行程序代码.docx_第1页
第1页 / 共26页
天体运行程序代码.docx_第2页
第2页 / 共26页
天体运行程序代码.docx_第3页
第3页 / 共26页
天体运行程序代码.docx_第4页
第4页 / 共26页
天体运行程序代码.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

天体运行程序代码.docx

《天体运行程序代码.docx》由会员分享,可在线阅读,更多相关《天体运行程序代码.docx(26页珍藏版)》请在冰豆网上搜索。

天体运行程序代码.docx

天体运行程序代码

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

'一、必须在引用中勾选:

OLEAutomatuon,否则ImgAsStdPicture语句会出错

'二、需在窗体放置以下4个控件,所有控件不用设置任何属性,均采用默认设置:

'   Picture1,Picture2,Timer1,Command1(注意:

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

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

'   即:

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

DimctD()AstyD,ctDsAsLong,ctB()AsLong,ctCenterAsLong,ct3DAsBoolean

DimctBiAsSingle,ctVAsSingle,ctBWAsLong,ctSeeJAsLong,ctTrackAsBoolean

DimctSeeBiAsSingle,ctSetAsMenuSet,ctShowXXAsBoolean,ctColorXXAsBoolean

DimctP180AsSingle,ctP90AsSingle,ctP270AsSingle,ctP360AsSingle

DimctSmall()AstySmall,ctSmallsAsLong,ctX()AstyX,ctXsAsLong,ctSizeAsLong

'定义表示星星的数据类型

PrivateTypetyX

   xAsSingle

   yAsSingle

   rAsLong

   tAsLong

   SeAsLong

EndType

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

PrivateTypetyD

   JiAsLong       '天体级别

   CapAsString    '天体名称

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

   aAsSingle      '轨道:

横半径

   bAsSingle      '轨道:

纵半径

   CAsSingle      '轨道:

焦点

   eAsSingle      '轨道:

偏心率

   DipAsSingle    '轨道:

倾角

   IsHuiAsBoolean'是否彗星

   IsSmallAsBoolean'是否小行星

   FatherAsLong   '父天体序号:

轨道焦点上的天体

   SeAsLong       '颜色

   VAsSingle      '运行角速度

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

   xAsSingle      '天体当前坐标

   yAsSingle

   xUpAsSingle    '上一时刻坐标

   yUpAsSingle

   VisibleAsBoolean'是否显示:

球体

   ShowCapAsBoolean'是否显示:

标题

   GuiDaoAsBoolean  '是否显示:

轨道

   GuiJiAsBoolean   '是否显示:

轨迹

   ImgAsStdPicture  '天体3D图像

   LineFuAsBoolean  '与父天体的中心连线

EndType

'定义小行星类型

PrivateTypetySmall

   aAsSingle      '轨道:

横半径

   bAsSingle      '轨道:

纵半径

   JiaoAsSingle

EndType

EnumMenuSet

   '以下为选项菜单标示

   ms_Size=-11    '设置字体大小

   ms_RunStop=-10'开始/暂停

   ms_3D=-9       '3D立体图像

   ms_ColorXX=-8  '是否显彩色星星

   ms_ShowXX=-7   '是否显示闪烁的星星

   ms_DefSet=-6   '默认设置

   ms_Track=-5    '轨迹:

显示/隐藏

   '以下为菜单全选、全不选

   ms_Wei=-4

   ms_Xing=-3

   ms_All=-2

   ms_NoAll=-1

   '以下为按钮标示

   ms_Step=0    '步进,下一位置

   ms_UnRun       '后退

   ms_Opt         '显示选项菜单

   ms_Center      '参照系

   ms_Visible     '天体:

显示/隐藏

   ms_ShowCap     '天体名称

   ms_GuiDao      '轨道

   ms_GuiJi       '轨迹

   ms_LineFu      '与父天体的中心连线

   ms_Bi          '缩放比

   ms_V           '速度

   ms_SeeJ        '视角

EndEnum

PrivateDeclareFunctionGdiTransparentBltLib"gdi32"(ByValhdc1AsLong,ByValX1AsLong,ByValy1AsLong,ByValW1AsLong,ByValH1AsLong,ByValHdc2AsLong,ByValX2AsLong,ByValY2AsLong,ByValW2AsLong,ByValH2AsLong,ByValColorAsLong)AsLong

PrivateSubForm_Load()

   Me.ScaleMode=3:

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

   mFast.Visible=False:

ctP180=3.1415926

   ctP90=ctP180*0.5:

ctP360=ctP180*2:

ctP270=ctP90*3

   

   Timer1.Interval=25:

Timer1.Enabled=True

   CallInit

  '窗体大小为屏幕的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,KAsLong,SAsLong

   

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

调试完毕应设为0。

调试代码****

   Picture1.AutoRedraw=True:

Picture1.BackColor=&H180000

   Picture1.ScaleMode=3

   

   Picture2.BorderStyle=0:

Picture2.ScaleMode=3

   Picture2.AutoRedraw=True:

Picture2.Visible=False

   Picture2.BackColor=Picture1.BackColor

  

   ctSize=9

   ctCenter=0:

ctBi=1:

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

   ctSeeJ=30:

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

   ctTrack=False'默认:

不显示运动轨迹(不是轨道)

   ct3D=True     '默认:

3D立体图像

   ctShowXX=True'默认:

显示闪烁的星星

   CallRndXX      '初始闪烁的星星

    

   '添加按钮

   KjClsCommand1:

Command1(0).BackColor=Me.BackColor

   KjAddCommand1,"选项(&O)",ms_Opt,"设置选项"

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

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

   

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

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

显示/隐藏"

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

显示/隐藏"

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

显示/隐藏"

   KjAddCommand1,"轨迹(&J)",ms_GuiJi,"运动轨迹,选中“选项-显示运动轨迹”时有效"

   KjAddCommand1,"连线(&L)",ms_LineFu,"与父天体的中心连线,同时显示对应天体时有效"

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

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

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

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

   '参数依次是:

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

   ctDs=-1:

ReDimctD(0To0)

   AddCircle"太阳","",22,2,0,1.44,,RGB(230,180,0)

   AddCircle"水星","",5,0.5,0.206,5.45,7.001,&H999999

   AddCircle"金星","",9,0.8,0.007,3.24,3.394,&H55AAAA

   AddCircle"地球","",10,1.2,0.017,1.81,,RGB(0,0,255)

      AddCircle"月亮","地球",4,0.2,0,10.8,,&H333333

  '    ctD(CapToNum("月亮")).IsSmall=True'调试代码****

         AddCircle"嫦娥1号","月亮",2,0.06,0,21.6,,&HCCCCCC

   AddCircle"火星","",6,1.8,0.093,0.91,1.851,&H1155FF

      AddCircle"火卫1","火星",3,0.1,0,15,,&H555500,10

      AddCircle"火卫2","火星",3,0.15,0,17,,&H5555DD,200

   AddCircle"小行星","",6,2.4,0.093,0.7,0,&H666666'小行星轨道倾角多少?

   ctD(CapToNum("小行星")).IsSmall=True

   

   AddCircle"木星","",16,3,0.0483,0.54,1.308,&H776655

      AddCircle"木卫1","木星",2,0.25,0,9,,&H883487,10

      AddCircle"木卫2","木星",2,0.3,0,6.3,,&H348888,100

      AddCircle"木卫3","木星",3,0.35,0,5.4,,&HAA34CC,190

      AddCircle"木卫4","木星",4,0.45,0,3.6,,&H888888,280

   AddCircle"土星","",14,5,0.056,0.36,2.488,&H2266CC

      AddCircle"土卫6","土星",4,0.25,0,9.5,30,&H99EEEE

   AddCircle"天王星","",12,6.5,0.046,0.27,0.774,&HCC7777

      AddCircle"天卫3","天王星",3,0.2,0,9.6,,&H33FF88,10

      AddCircle"天卫4","天王星",3,0.3,0,6.2,,&HFF3311,200

   AddCircle"海王星","",12,9.2,0.009,0.18,1.774,&HFF7766

       AddCircle"海卫1","海王星",3,0.25,0,-5.4,,&H882388

   AddCircle"哈雷彗星","",2,5.5,0.83,-0.21,18,&H777777,-10

   ctD(CapToNum("哈雷彗星")).IsHui=True

   

   '初始化小行星

   ForK=0ToctDs

      IfctD(K).IsSmallThen

         ctD(K).GuiDao=False:

ctSmalls=90'小行星总个数

         S=ctD(K).b*0.07'12     '小行星带宽度

         ReDimctSmall(0ToctSmalls)

         ctSmall(0).a=ctD(K).a:

ctSmall(0).b=ctD(K).b

         ForI=1ToctSmalls

            RandomizeI

            ctSmall(I).a=Rnd*S-S*0.5+ctD(K).a

            ctSmall(I).b=Rnd*S-S*0.5+ctD(K).b

            ctSmall(I).Jiao=Rnd*ctP360

         Next

         ExitFor

      EndIf

   Next

   

   CallSortB       '将天体按轨道短半径从小到大排序,用数组ctB()记忆排序结果(天体序号)

   CallDrawAllBall'绘制所有天体的3D立体图像,存入天体变量ctD(I).Img

   CallForm_Resize

EndSub

PrivateSubRndXX()

   DimIAsLong,JAsLong

   ctXs=90'闪烁的星星个数

   ReDimctX(0ToctXs)

   ForI=0ToctXs

      RandomizeI

      ctX(I).x=Rnd*Screen.Width/Screen.TwipsPerPixelX-Screen.Width/Screen.TwipsPerPixelX*0.5

      ctX(I).y=Rnd*Screen.Height/Screen.TwipsPerPixelY-Screen.Height/Screen.TwipsPerPixelY*0.5

      Randomize

       ctX(I).r=2*Rnd:

ctX(I).t=6*Rnd

      IfctColorXXThen

         ctX(I).Se=&HFFFFFF*Rnd

      Else

         J=255*Rnd:

ctX(I).Se=RGB(J,J,J)

      EndIf

   Next

EndSub

PrivateSubDrawAllBall(OptionalIAsLong=-1,OptionalShowInfAsBoolean)

   '绘制所有天体的3D球形图像

   DimrAsLong,nStrAsString,xAsSingle,yAsSingle

   IfI>-1ThenGoSubSubDraw1:

ExitSub

   Me.MousePointer=11

   Picture1.Font.Size=32

   ForI=0ToctDs

      IfShowInfThen

         IfI=0ThennStr="1%"ElsenStr=Int(I/ctDs*100)&"%"

         nStr="正在更新图像"&vbCrLf&nStr

         x=-Picture1.TextWidth(nStr)*0.5:

y=-Picture1.TextHeight(nStr)*0.5

         Picture1.Line(x,y)-Step(-x*2,-y*2),&H776633,BF

         Picture1.CurrentX=x:

Picture1.CurrentY=y

         Picture1.PrintnStr

         Picture1.Refresh

      EndIf

      GoSubSubDraw1

   Next

   Picture2.Cls

   Picture2.Move0,0,2,2

   Me.MousePointer=0

  'doe

   ExitSub

   

SubDraw1:

   r=ctBi*ctD(I).r

   Ifr<2Thenr=2

   DrawBallr,r,r,&HFFFFFF,ctD(I).Se

   SetctD(I).Img=Picture2.Image

   Return

EndSub

PrivateSubDrawBall(rAsLong,ByValx0AsLong,ByValy0AsLong,Se1AsLong,Se2AsLong)

   '画一个立体球图案

   DimGDsAsLong,r0AsSingle,rGAsSingle

   DimStepRAsSingle,StepGAsSingle,StepBAsSingle

   DimxAsLong,yAsLong,X1AsLong,y1AsLong,BiAsSingle

   DimR1AsLong,G1AsLong,B1AsLong,R2AsLong,G2AsLong,B2AsLong

   

   GetRGBSe1,R1,G1,B1:

GetRGBSe2,R2,G2,B2

   

   Picture2.Cls

   Picture2.Width=r*2+1:

Picture2.Height=r*2+1

   

   GDs=6'与背景的过渡带

   

   X1=r*0.6:

y1=r*0.6              '高光中心点

   rG=Sqr((X1-x0)^2+(y1-y0)^2)'高光与中心的距离

   

   StepR=R2-R1:

StepG=G2-G1:

StepB=B2-B1

   

   Fory=0ToPicture2.ScaleHeight

   Forx=0ToPicture2.ScaleWidth

      r0=Sqr((x-x0)^2+(y-y0

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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