java小案例小球反弹(无能量损失)

java小案例小球反弹(无能量损失)

  • 作者:Geticsen
  • 时间:2019-10-13
  • 50人已阅读
简介 java小案例小球反弹(无能量损失),碰撞墙壁的时候依据动量守恒计算碰撞后的速度与方向。

效果图:

image.png

image.png

image.png

代码如下:

package test;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

 class Shell {
	 double  x=100,y=100;
	 int   speed;
	 int  width=10, height=10;
	 double  dir;
	static int size=30000;
	public  Shell(){
		
		this.speed = 3;
		this.dir = Math.random()*Math.PI*2;
		this.x = this.x*Math.cos(dir)+250;
		this.y = this.y*Math.sin(dir)+150;
	}
	
	public  void   draw(Graphics  g){
		Color   c =  g.getColor();
		g.setColor(Color.YELLOW);
		
		g.fillOval((int)x,(int) y, width, height);
		g.drawLine(0, 25, 500, 25);
		g.drawLine(2, 0, 2, 300);
		g.drawLine(500, 0, 500, 300);
		g.drawLine(0, 300, 500, 300);
		//小球沿着任意角度去飞
		x += speed*Math.cos(dir);
		y += speed*Math.sin(dir);
		
		
		if(this.x<0||this.x>500-this.width){
			this.dir  = Math.PI - this.dir;
		}
		
		if(this.y<30||this.y>300-height){
			this.dir  = - this.dir;
		}
	
		g.setColor(c);
	}
}
 class Mypan extends JPanel{
	 Shell []sh=new Shell[Shell.size];
	 
	 public  Mypan(){
		 this.setSize(500,300);
		 this.setVisible(true);
		 this.setBackground(Color.black);
		 for(int i=0;i<Shell.size;i++) {
			 sh[i]=new Shell();
		 
	      }
	 }
	 @Override
	public void paint(Graphics g) {
		// TODO Auto-generated method stub
		super.paint(g);
		for(int i=0;i<Shell.size;i++) {
			 sh[i].draw(g);
		 }
	}
 }
 public class  smallball extends JFrame implements Runnable{
	 Mypan pp;
	 public static void main(String []args) {
		 smallball am=new smallball();
		 Thread thread=new Thread(am);
		 thread.start();
	 }
	 public smallball() {
		 pp=new Mypan();
		 this.add(pp);
		 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		 this.setSize(600,400);
		 this.setBackground(Color.white);
		 this.setVisible(true);
		 
	 }
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true) {
			pp.repaint();
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
 }


文章评论


    2019-10-13Geticsen

    [熊猫]无聊测试

Top