Main

package nObjectProblem2;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
 
public class Main {
	public static void main(String[] args) throws IOException{
		Comet comet=new Comet();
 
 
		/**ユリウス日によるシミュレーション開始時刻[day]*/
		double start=2443550;
		/**積分間隔[day]*/
		double dt=1;
		/**表示間隔*/
		double step=1;
		/**シミュレーション終了時刻[day]*/
		double end=2443650;
		/*彗星の軌道要素*/
		/**近日点通過時[day]*/
		comet.t=2443542;
		/**近日点距離[au]*/
		comet.q=1.441685;
		/**離心率*/
		comet.e=0.599545;
		/**近地点黄経[deg]*/
		comet.w=328.9867;
		/**昇交点黄経[deg]*/
		comet.o=121.5246;
		/**軌道傾斜角[deg]*/
		comet.i=17.8559;
 
 
 
 
		/**天体*/
		Planet planet[]=new Planet[8];
		/**天文単位[m]*/
		final double AU=1.49597870691*Math.pow(10,11);
		/**万有引力定数[AU^3/day^2/kg]*/
		final double G=6.67259*Math.pow(10,-11)*3600*24*3600*24/AU/AU/AU;
		/**地軸の傾き[degree]*/
		double eps=23.43792638;
		/**現在時刻[day]*/
		double now=start;
		BufferedReader br=new BufferedReader(new FileReader("data.csv"));
		for(int i=0;i<8;i++){
			planet[i]=new Planet();
			String str=br.readLine();
			String strs[]=str.split(",");
			planet[i].l[0]=Double.parseDouble(strs[0]);
			planet[i].l[1]=Double.parseDouble(strs[1]);
			planet[i].l[2]=Double.parseDouble(strs[2]);
			planet[i].w[0]=Double.parseDouble(strs[3]);
			planet[i].w[1]=Double.parseDouble(strs[4]);
			planet[i].w[2]=Double.parseDouble(strs[5]);
			planet[i].o[0]=Double.parseDouble(strs[6]);
			planet[i].o[1]=Double.parseDouble(strs[7]);
			planet[i].o[2]=Double.parseDouble(strs[8]);
			planet[i].i[0]=Double.parseDouble(strs[9]);
			planet[i].i[1]=Double.parseDouble(strs[10]);
			planet[i].e[0]=Double.parseDouble(strs[11]);
			planet[i].e[1]=Double.parseDouble(strs[12]);
			planet[i].a=Double.parseDouble(strs[13]);
			planet[i].m=Double.parseDouble(strs[14])*5.974*Math.pow(10,24);
		}
		br.close();
 
		PrintWriter pw;
		pw=new PrintWriter(new BufferedWriter(new FileWriter("output.csv")));
 
		comet.p=comet.start(now,eps);
		double pn[]=new double[3];
		pn=comet.start(now+1,eps);
		comet.v[0]=(pn[0]-comet.p[0])/dt;
		comet.v[1]=(pn[1]-comet.p[1])/dt;
		comet.v[2]=(pn[2]-comet.p[2]-pn[2])/dt;
 
		double a[]=new double[3];
		a[0]=0;
		a[1]=0;
		a[2]=0;
		while(now<end){
 
			for(int i=0;i<8;i++){
				planet[i].p=planet[i].nowposv(now);
				double p=Math.sqrt(Math.pow(comet.p[0]-planet[i].p[0],2)+Math.pow(comet.p[1]-planet[i].p[1],2)+Math.pow(comet.p[2]-planet[i].p[2],2));
				//a=加速度
				a[0]=a[0]-G*planet[i].m*(comet.p[0]-planet[i].p[0])/Math.pow(p,3);
				a[1]=a[1]-G*planet[i].m*(comet.p[1]-planet[i].p[1])/Math.pow(p,3);
				a[2]=a[2]-G*planet[i].m*(comet.p[2]-planet[i].p[2])/Math.pow(p,3);
			}
			comet.dv[0]=dt*a[0];
			comet.dv[1]=dt*a[1];
			comet.dv[2]=dt*a[2];
			comet.v[0]=comet.v[0]+comet.dv[0];
			comet.v[1]=comet.v[1]+comet.dv[1];
			comet.v[2]=comet.v[2]+comet.dv[2];
			comet.p[0]=comet.p[0]+comet.v[0]*dt;
			comet.p[1]=comet.p[1]+comet.v[1]*dt;
			comet.p[2]=comet.p[2]+comet.v[2]*dt;
 
			double se[]=new double[6];
			se[0]=comet.p[0]-planet[3].p[0];
			se[1]=comet.p[1]-planet[3].p[1];
			se[2]=comet.p[2]-planet[3].p[2];
			se[3]=Math.sqrt(se[0]*se[0]+se[1]*se[1]+se[2]*se[2]);
			se[4]=Math.toDegrees(Math.asin(se[2]/se[3]));//delta
			se[5]=Math.toDegrees(Math.atan(se[1]/se[0]));//alpha
			if(se[1]>0&&se[0]<0){
				se[5]=180-se[5];
			}else if(se[1]<0&&se[0]>0){
				se[5]=360-se[5];
			}else if(se[1]<0&&se[0]<0){
				se[5]=180+se[5];
			}
			if(se[5]>360){
				while(true){
					se[5]=se[5]-360;
					if(se[5]-360<0){
						break;
					}
				}
			}
 
 
			if(now==(int)(now/step)*step){
				Comet c=comet;
				pw.println(now+","+c.p[0]+","+c.p[1]+","+c.p[2]);
				//pw.print(now+","+c.p[0]+","+c.p[1]+","+c.p[2]+",");
				/*for(int i=0;i<8;i++){
					pw.print(now+","+planet[i].p[0]+","+planet[i].p[1]+","+planet[i].p[2]+",");
				}
				pw.println();*/
				System.out.println(now+",α="+(int)(se[5]/15)+"h"+(se[5]-(int)(se[5]/15)*15)*4+",δ="+se[4]+",r="+Math.sqrt(comet.p[0]*comet.p[0]+comet.p[1]*comet.p[1]+comet.p[2]*comet.p[2])+",Δ="+se[3]);
			}
			now++;
		}
 
		pw.close();
 
	}
}
 
最終更新:2009年01月10日 23:06
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。