import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
/**
* 类说明:编写一个Java GUI应用程序,采用Java多线程技术,模拟自由落体和平抛运动:
* 一个球自由落下,一个球水平抛出。(本题30分)
* (自由落体物理公式:h= g *t2/2 ;平抛运动物理公式:h= g *t2/2 ,x=26*t ;
* h代表高度,t代表时间,g代表重力加速度=9.8
* m/s2 )
*/
public class BallCanvas extends Canvas implements Runnable {
private static final long serialVersionUID = 1L;
private int h = 0;// 高度
private final float G = 9.8f;// 重力加速度
private final int D = 20;// 小球直径
private float t = 0;// 时间
private int x = 0;// 水平位移
private int v = 36;// 平抛初始速度
public BallCanvas() {
new Thread(this).start();
}
@Override
public void run() {
// 利用线程的死循环模拟小球运动过程
while (true) {
t += 0.2;
x = (int) (v * t);// 水平位移
h = (int) (G * t * t / 2);// 下落高度
repaint();
if (x > this.getWidth() || h > this.getHeight()) {
t = 0;
x = 0;
h = 0;
}
try {
Thread.sleep(85);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void paint(Graphics g) {
// 重新绘制屏幕
// g.setColor(Color.white);
// g.fillRect(0, 0, this.getWidth(), this.getHeight());
// 画出小球图形
g.setColor(Color.red);
g.fillArc(x, h, D, D, 0, 360);
g.setColor(Color.blue);
g.fillArc(0, h, D, D, 0, 360);
}
public static void main(String[] args) {
// 创建出可视化窗口
JFrame frame = new JFrame("我的小球");
// 获得该窗口的容器
Container con = frame.getContentPane();
// 往该容器中添加Canvas组件
// Canvas 组件表示屏幕上一个空白矩形区域,
// 应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。
con.add(new BallCanvas(), BorderLayout.CENTER);
//将组件的首选大小设置为常量值
frame.setPreferredSize(new Dimension(400, 400));
frame.setVisible(true);
//确保组件具有有效的布局。
frame.validate();
// 将窗口设置为屏幕正中央
frame.setLocationRelativeTo(null);
// 设置窗口关闭按钮操作有效
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
}
}
分享到:
相关推荐
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:ball.m; 调用函数:其他m文件;无需运行 运行结果效果图;...运动学:倒立摆、泊车 天体学:卫星轨道、姿态
这个设计旨在创建一个交互式的图形用户界面(GUI),用于模拟小球的运动轨迹,并结合音乐文件的读取功能,为用户提供一种独特的视听体验。 首先,我们要了解GUI设计的基本概念。GUI(图形用户界面)是用户与计算机...
在本文中,我们将深入探讨如何使用VC++6.0中的MFC(Microsoft Foundation Classes)库来模拟小球碰撞的过程。MFC是微软提供的一套C++类库,它简化了Windows应用程序的开发,特别是图形用户界面(GUI)的构建。 首先...
Matlab领域上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 ...运动学:倒立摆、泊车 天体学:卫星轨道、姿态 船舶:控制、运动 电磁学:电场分布、电偶极子、永磁同步、变压器
7. **小球运动逻辑**:小球的运动由速度和方向决定。每次定时器触发时,根据当前速度和方向更新小球的位置。当小球到达边界时,需要反转X或Y轴上的速度,模拟反弹效果。 8. **代码结构**:为了保持代码的清晰和可...
本课程设计旨在利用Java语言,通过绘制二次函数曲线y=a*x^2+b*x+c,模拟小球沿抛物线轨迹的动态运动。下面我们将详细探讨这一项目的实现细节和技术要点。 首先,程序的核心在于绘制函数曲线。Java提供了丰富的图形...
2. **小球运动逻辑**:在`run()`方法中,我们可以使用循环来模拟小球的持续运动。根据物理规则,小球每次碰撞边界时会改变方向,速度可能会有变化(考虑弹性碰撞)。这里可以使用`Thread.sleep()`方法来控制线程暂停...
Matlab提供了强大的数值计算功能和丰富的函数库,可以有效地解微分方程,获取小球运动的位移数据。通过分析模拟程序的运行效率,可以对程序进行针对性优化,如调整算法、减少循环次数等方法,来提高程序的运行速度,...
在Java编程语言中,"小球摇摆运动"通常指的是创建一个模拟物理世界中小球摆动的动画效果。这个项目可能会结合图形用户界面(GUI)技术,如Java Swing或JavaFX,来展示一个小球在虚拟空间中的摇摆动作。下面我们将...
我们可以使用`g.fillOval(x, y, width, height)`来填充一个椭圆,模拟小球的形状。 3. **事件处理**: 小球的运动需要定时器(Timer)来触发。Java的javax.swing.Timer类可以定期执行指定的任务,例如每间隔一定时间...
GUI线程——模拟小球自由落体和平抛运动,一个小球自由落下,一个小球水平抛出
"小球运动"这部分可能涉及到MATLAB的图形用户界面(GUI)或者简单的命令行编程,通过编程控制小球的位置和速度,使其在指定路径上移动。这通常需要利用MATLAB的图形函数,如`plot`或`scatter`来绘制小球,以及`...
对于"小球"这个标签,可能意味着程序在模拟过程中考虑了小球的物理特性,比如质量、形状和尺寸,以及可能的空气阻力影响。尽管描述中没有明确指出,但这些因素可以增加模拟的真实感和准确性。 文件列表中只有一个...
在Java编程语言中,开发动态应用,如模拟运动小球或创建电子时钟,涉及到多个核心概念和技术。这里,我们将深入探讨如何使用Java来实现这些功能。 首先,"运动小球"的实现主要依赖于图形用户界面(GUI)和动画处理...
2. **图形绘制**:在Windows API中,通常使用`BeginPaint`和`EndPaint`函数来初始化和结束绘画过程,然后通过`FillSolidRect`填充颜色,`MoveToEx`和`LineTo`绘制线条来实现小球的运动轨迹。如果使用Qt等库,可以...
小球碰撞的模拟通常涉及到物理学中的运动学和动力学知识。根据牛顿的运动定律,当两个小球碰撞时,它们的动量会守恒。在二维空间中,这通常意味着碰撞前后系统的总动量(质量和速度的乘积)在水平和垂直方向上的分量...
标题中的"小球在正弦曲线上运动.zip"是一个基于VC6.0的MFC(Microsoft Foundation Classes)项目,它展示了如何用C++编程语言创建一个动态模拟,使得一个小球沿着正弦函数的图形轨迹移动。这个项目对于初学者来说是...
在本项目"Itat第三届复赛自由落体与平抛答案"中,开发者通过编写程序来模拟物理中的自由落体和平抛运动,以此加深对Java编程语言的理解,特别是面向对象、多线程以及图形用户界面(GUI)的应用。以下是这些知识点的...
在这个项目中,我们通常会创建一个`JFrame`作为主窗口,然后在其上添加一个`JPanel`作为小球运动的画布。`JPanel`允许自定义绘图,这正是我们需要的。 在`JPanel`的`paintComponent`方法中,我们将重写以绘制小球。...
综上所述,"小球自由落体JAVA源码"项目涵盖了多线程编程、线程池管理、物理模拟、GUI设计、事件处理和并发控制等多个Java编程的关键知识点,是一个很好的学习和实践平台。通过深入理解并分析该项目,开发者可以提升...