import java.awt.*; import java.io.*; import java.lang.*; /** * PhObject のサンプルアプレット * 2物体の運動 */ public class Test2 extends java.applet.Applet { /** シミュレーション用の物理空間 **/ MyField2 workField = new MyField2(); public void init(){ setLayout(new BorderLayout()); add("Center",workField); workField.set_sleepTime(5); // 描画の時間間隔を0.01sに設定。 workField.init(2); // 初期設定(物体は2個) } public void start(){ workField.start(); // アニメーション開始 } } class MyField2 extends PhField{ public void init(int k){ makeObject(k); dt = 0.05; obj[0].s.set( 220.0, 150.0); obj[0].v.set( 10.0, 90.0 / 180.0 * Math.PI); obj[0].set_m( 10.0); obj[1].s.set( 80.0, 150.0); obj[1].v.set( 10.0, -90.0 / 180.0 * Math.PI); obj[1].set_m( 10.0); set_force(); obj[0].a.set_acc( obj[0].get_f(), obj[0].get_m()); obj[0].v.add_vel( obj[0].get_a(), - dt / 2); obj[1].a.set_acc( obj[1].get_f(), obj[1].get_m()); obj[1].v.add_vel( obj[1].get_a(), - dt / 2); } public void set_force() { obj[0].f.set(1000000.0 /(obj[0].s.dist(obj[1].s) * obj[0].s.dist(obj[1].s)) , obj[0].s.direct(obj[1].s)); obj[1].f.set(1000000.0 /(obj[1].s.dist(obj[0].s) * obj[1].s.dist(obj[0].s)) , obj[1].s.direct(obj[0].s)); } } |