1.题目要求:
如题所示----基于C#的2D太阳、地球、月亮运动轨迹模拟实现。
2.研究思路:
此题目属于图形学中比较典型的有关运动轨迹实现的问题。
首先二话不说,站在面向对象的角度考虑至少包含太阳、地球、月亮三个类。由于是模拟实现,故有些相关数据并非的绝对正确。在此我们假设太阳位于屏幕的画布的中心,且静止不动(虽然有自转,但是由于是2D不好显示,并且如此假设也不影响最终整体效果,故假设之);地球围绕太阳公转(假设运行轨迹为圆);月亮围绕地球公转。
问题难点:地球在围绕太阳转动的同时,月亮也在围绕地球公转,并且地球公转的角速度是月亮角速度的1/12.
3.程序说明:
运行平台:windows 7
开发工具:Microsoft Visual Studio 2010
开发语言:C# 、GDI+
程序类型:Windows窗体应用程序
4.具体实现:
1)兴建工程(在此我们将此工程命名为SunEarthMoon)
打开Visual Studio 2010 -->文件-->兴建-->项目;选择Windows窗体应用程序,在"名称"后面上SunEarthMoon, 然后选择程序保存的路径,单击确定即可。
如果你在你的“解决方案资源管理器”中看到有如下图示文件目录结构,
那么说明你的
SunEarthMoon工程已经成功创建可以成功跳至2)了;否之
,你还需要返回1),直到成功为止。
2)业务逻辑类实现
(1)在模拟的时候,由于太阳,地球,月亮他们有很多相似的地方,故在此抽象出了一个
Start的父类,里面主要包含一些公共的属性并提供一个待子类重写的draw()虚函数。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace SunEarthMoon
{
class Start
{
public Point center; // 星球的球星
public Point movingCenter; //星球公转轨迹的中心
public int radius; //星球的半径
publi