Java编程实现的模拟行星运动示例编程实现的模拟行星运动示例
主要介绍了Java编程实现的模拟行星运动,涉及java基于swing组建绘制动态效果及数值运算相关操作技巧,并总结分析了java面
向对象的相关特性,需要的朋友可以参考下
本文实例讲述了Java编程实现的模拟行星运动。分享给大家供大家参考,具体如下:
期待了很久的Java语言程序设计也拉下了帷幕,在几个月的时间里基本掌握了java的简单用法,学习了java的主要基础知识,面向对象思想,
多线程并发控制,swing界面设计,动画制作等,最后结课了也打算制作一个课程设计能够尽可能多的涵盖所学知识,将其进行串联,因此考
虑实现了一个简单的模拟行星运动的小软件,主要思路如下:
利用动画实现行星运动的模拟,主面板里有一个中心行星,同时绘制了椭圆轨道,有一颗运动的行星围绕着中心行星运动。同时右下角设置的
有四个按钮,即“Start”、“Pause”、“accelerate”和“decelerate”分别可以使行星运动、暂停、加速、减速。
一、类的设计:一、类的设计:
Star继承自JPanel。Star类是行星的基类,所有运动的行星都是继承自Star类。内部draw()方法主要绘制了一个实心圆形,目的是在每次绘制
时,可以保证中心行星始终显示。paintComponent()方法重写了JPanel的绘制方法,目的是保证继承自Star类的Stars类的实例对象可以绘制
出自己的行星。如下:
package Star;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Star extends JPanel{
/**
* 基本的行星类
*/
private static final long serialVersionUID = 1L;
int x,y;
int width,height;
public Star() {
width = 10;
height = 10;
}
public Star(int x, int y){
this.x = x;
this.y = y;
width = 10;
height = 10;
}
public void draw(Graphics g){
g.setColor(Color.blue);
g.fillOval(x, y, width, height);
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.fillOval(x, y, width, height);
}
}
Stars类继承自Star类,是对Star类的进一步细化,表示运动的行星。Stars类中的alfa表示运动行星的运动起始角度,speed表示运动速度,可
对其进行修改。Long,Short分别表示椭圆轨迹的长轴与短轴。center表示其实例化对象的中心行星。paintComponent()函数重写了
paintComponent(),内部引用了父类的draw()函数,并且根据Long,,Short绘制了椭圆轨道,Long、Short由实例化对象调用构造方法来决
定。move()函数描述了x,y的变化方程,即围绕着椭圆轨道变化,同时规定了alfa的变化方式。start()函数表示线程开始,pause()函数表示线
程暂停,accelerate()函数表示对行星的加速操作,decelerate()函数表示对行星减速的操作。
Pthread类目的是控制线程,即通过对Pthread类的实例化可以控制行星的开始运动,暂停运动,加速,减速。Pthread类继承自Thread类,且
包含于Starts类中,因而,PThread类不能被定义为共有类。PThread类提供了run()方法,不断调用repaint()方法,对画面进行重新绘制。
setsuspend()方法利用改变boolean变量对线程进行暂停操作(调用notifyall()方法)。因为Pthread类是Starts的内部类,所以之后Starts类中
将生成一个PThread类的对象,并且利用该对象,对线程进行操作。
设计如下:
package Star;
import java.awt.Color;
import java.awt.Graphics;
public class Stars extends Star{
/**
* 运动的行星
*/
private static final long serialVersionUID = 1L;
double alfa ;
double speed ;
Star center;
int Long ; //长轴
int Short;//短轴
public Stars(int Px,int Py,Star center){
super(Px,Py);
this.center = center;
Long = (Px - center.x)*2;
Short = (Py - center.y)*2;
this.setOpaque(true);
// move();
评论0
最新资源