1軸上の運動量の保存【練習】
♥0 |
Line 56 |
Modified 2010-08-05 14:06:00 |
MIT License
archived:2017-03-20 12:10:54
ActionScript3 source code
/**
* Copyright Tamanegi_kenshi ( http://wonderfl.net/user/Tamanegi_kenshi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/mnQQ
*/
package{
import flash.display.Sprite;
import flash.events.Event;
public class test extends Sprite{
private var ball0:Ball;
private var ball1:Ball;
public function test(){
init();
}
private function init():void{
ball0=new Ball(40);
addChild(ball0);
ball0.x=50;
ball0.y=300;
ball0.vx=2;
ball0.mass=2;
ball1=new Ball(25);
addChild(ball1);
ball1.x=300;
ball1.y=300;
ball1.vx=1;
ball1.mass=2;
addEventListener(Event.ENTER_FRAME,onEnter);
}
private function onEnter(e:Event):void{
ball0.x+=ball0.vx;
ball1.x+=ball1.vx;
if(ball0.x<0){
ball0.vx*=-1;
}else if(ball1.x>stage.stageWidth){
ball1.vx*=-1;
}
var dist:Number=ball1.x-ball0.x;
if(Math.abs(dist)<ball0.radius+ball1.radius){
var vxTotal:Number=ball0.vx-ball1.vx;
ball0.vx=(ball0.mass-ball1.mass)*ball0.vx+2*ball1.mass*ball1.vx/(ball0.mass+ball1.mass);
ball1.vx=vxTotal+ball0.vx;
ball0.x+=ball0.vx;
ball1.x+=ball1.vx;
}
}
}
}
import flash.display.Sprite;
class Ball extends Sprite{
public var radius:Number;
public var vx:Number=0;
public var vy:Number=0;
public var mass:uint=0;
function Ball (radius:uint){
this.radius=radius;
graphics.beginFill(0x000000);
graphics.drawCircle(0,0,radius);
graphics.endFill();
}
}