import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; // /**惑星系クラス(Applet憑き)*/ public class PlanetarySystem2 extends Applet implements Runnable{ //汎用定数 public double G = 6.672*Math.pow(10,-11); //万有引力定数 public double mAU = 149597870; //天文単位/1000 //Applet用定数など public static final int APPLET_WIDTH=300; public static final int APPLET_HEIGHT=300; public static final double RANDOM_PATTERNS=10000;//乱数パターン数 public Thread thread; public Graphics graphics; //主なfields public int minorbodies; //メンバ小天体数 public double dt; //微少時間 public long time;//時間 //天体データ配列 public double[] x; //x座標 public double[] y; //y座標 public double[] z; //z座標 public double[] px; //運動量x成分 public double[] py; //運動量y成分 public double[] pz; //運動量z成分 public double[] m; //質量 public double[] r; //半径 public boolean[] isConflicted;//衝突フラグ public int[] xx; //2DApplet表示用x座標 public int[] yy; //2DApplet表示用y座標 public int[] bxx; //2DApplet消去用x座標 public int[] byy; //2DApplet消去用y座標 public boolean[] isSeen;//2DApplet表示フラグ //ウィンドウ変数 public double scale;//表示される領域の幅(=高さ) public double CX;//表示領域センターx座標 public double CY;//表示領域センターy座標 public double WX0;//表示領域始点x座標 public double WY0;//表示領域始点y座標 public double WX1;//表示領域終点x座標 public double WY1;//表示領域終点y座標 //Applet初期化 public void init(){ time=0; //コンピュータ時間によるMath.random()空回し for(int i=0;i<(int)(System.currentTimeMillis()%RANDOM_PATTERNS);i++){ Math.random(); } initialize(); initWindowCtoW(); graphics = this.getGraphics(); } //------------------INITIALIZATION---------------------- public void initialize(){ CX=0;//宇宙のセンターをフォーカス CY=0;//宇宙のセンターをフォーカス scale=10*mAU;//1画面=0.01天文単位 dt=10000;//微少時間 minorbodies = 20;//天体数20個 x=new double[minorbodies]; y=new double[minorbodies]; z=new double[minorbodies]; px=new double[minorbodies]; py=new double[minorbodies]; pz=new double[minorbodies]; m=new double[minorbodies]; r=new double[minorbodies]; xx=new int[minorbodies]; yy=new int[minorbodies]; bxx=new int[minorbodies]; byy=new int[minorbodies]; isSeen=new boolean[minorbodies]; isConflicted=new boolean[minorbodies]; for(int i=0;iAPPLET_WIDTH || yy_>APPLET_HEIGHT){ isSeen[a] = false; }else{ bxx[a]=xx[a]; byy[a]=yy[a]; xx[a]=(int)xx_;//2d変換 yy[a]=(int)yy_;//2d変換 isSeen[a] = true; } } //計算----------------------------------------------- public void calc(){ //運動量変化・衝突計算 for(int i=0;i