1軸上の運動量の保存【練習】

by Tamanegi_kenshi
♥0 | Line 56 | Modified 2010-08-05 14:06:00 | MIT License
play

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();
    
}
    
}

Forked