改め Objective Technician

はぐれ技術者のやりたい放題

ソース中盤

2007-10-31 16:23:41 | プログラミング
class Parameters{

	static public float display_scale = 0.01f;
	static public int exe_speed = 2;

	static public float size_x = 0.0f;  //DPFサイズ[μm]
	static public float size_y = 0.0f;
	static public float size_z = 0.0f;

	static public float border = 80.0f;  //DPFのx, z方向切り出し長さ[μm]

	static public float xbox_size; //計算ブロックサイズ[μm]
	static public float ybox_size;
	static public float zbox_size;

	static public float cluc_scale;//ブロック分割スケール(小さいほど細かく分割)

	static public int xbox_num;  //計算ブロック数
	static public int ybox_num;
	static public int zbox_num;

	static public String dpf_filename = "SiC_IVE_ascii.stl";

	static public int dpf_poly_num;//DPFポリゴン数

	static public float pm_radius = 3.0f;//発生PM平均半径[μm]
	static public float pm_radius_sigma = 0.1f;//発生PM半径標準偏差[μm]

	static public float pm_generate_num = 2.0f;//PM粒子発生速度[個/s]
	static public float pm_flow = 1.0f;//PM流れ速度[μm/s]
	static public float pm_diffuse = 1.0f;//PM拡散速度[μm/s]
	static public float pm_burn = 0.1f;//DPFと接触したときに燃焼して減少するPMの半径[μm/s]

	static public float step = 1.0f;//計算時間間隔[step/s]

	static public int s_pm_generate_num;//PM粒子発生速度[個/step]
	static public float s_pm_flow;//PM流れ速度[μm/step]
	static public float s_pm_diffuse;//PM拡散速度[μm/steo]
	static public float s_pm_burn;//DPFと接触したときに燃焼して減少するPMの半径[μm/step]

	static public float depth_shift;//シミュレーション気相空間(yシフト)[μm]
	static public float bottom;//シミュレーション下層空間(y座標)[μm]

	static public float current_time;//シミュレーション時間[s]
	static public int current_step;//シミュレーションステップ[step]

	static public float end_time = Float.POSITIVE_INFINITY;//シミュレーション終了時間[s]
	static public int end_step;//シミュレーション終了ステップ[step]

	static public int pm_num;

	static int[] get_index(Point3f position){
		int vertex[] = new int[3];

		vertex[0] = (int)(position.x/Parameters.xbox_size);
		vertex[1] = (int)(position.y/Parameters.ybox_size);
		vertex[2] = (int)(position.z/Parameters.zbox_size);

		return vertex;
	}

	static void pm_init(boolean first){

		if(first){
			Date currentDate = new Date();
			Pm.generator = new Random(currentDate.getTime());
			Parameters.pm_num = 0;
			Parameters.current_time = 0.0f;
			Parameters.current_step = 0;
			Parameters.exe_speed = 2;
			PMSimulator.first = false;

		}

		Parameters.s_pm_burn = Parameters.pm_burn/Parameters.step;
		Parameters.s_pm_flow = Parameters.pm_flow/Parameters.step;
		Parameters.s_pm_diffuse = Parameters.pm_diffuse/Parameters.step;
		Parameters.s_pm_generate_num = (int)(Parameters.pm_generate_num/Parameters.step);

		Parameters.end_step = Math.round(Parameters.end_time/Parameters.step);


	}


	static void setbox_num(Vector<Point3f> dpf){

		float min_size = Math.min(Parameters.size_x, Math.min(Parameters.size_y, Parameters.size_z));
		Parameters.cluc_scale = 2.0f*(Parameters.pm_radius + Parameters.pm_radius_sigma);

		//計算ブロック数設定(ブロックは立方体)
		Parameters.xbox_num = Math.round(Parameters.size_x/Parameters.cluc_scale);
		Parameters.ybox_num = Math.round(Parameters.size_y/Parameters.cluc_scale);
		Parameters.zbox_num = Math.round(Parameters.size_z/Parameters.cluc_scale);

		//計算ブロックサイズ設定
		Parameters.xbox_size = Parameters.size_x/(float)Parameters.xbox_num;
		Parameters.ybox_size = Parameters.size_y/(float)Parameters.ybox_num;
		Parameters.zbox_size = Parameters.size_z/(float)Parameters.zbox_num;

		Parameters.dpf_poly_num = dpf.size()/3;


	}
}

class Coordinate{


	static MyTransformGroup coordinate = null;



	static void set_coordinate(Material mat){

		MyCylinder cx = new MyCylinder(1.0f, 120.0f, mat, null);
		cx.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, (float)Math.PI/2.0f));
		cx.mulTranslation(new Vector3f(60.0f, 0.0f, 0.0f));
		coordinate.addChild(cx);

		MyCylinder cy = new MyCylinder(1.0f, 120.0f, mat, null);
		cy.mulTranslation(new Vector3f(0.0f, 60.0f, 0.0f));
		coordinate.addChild(cy);
		MyCylinder cz = new MyCylinder(1.0f, 120.0f, mat, null);

		cz.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f));
		cz.mulTranslation(new Vector3f(0.0f, 0.0f, 60.0f));
		coordinate.addChild(cz);
		MySphere org = new MySphere(3.0f, mat, null);

		coordinate.addChild(org);
	}


	static void set_label(Material mat){

		MyCylinder cxl = new MyCylinder(3.0f, 1.0f, mat, null);
		cxl.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, (float)Math.PI/2.0f));
		cxl.mulTranslation(new Vector3f(100.0f, 0.0f, 0.0f));
		coordinate.addChild(cxl);

		MyCylinder cyl = new MyCylinder(3.0f, 1.0f, mat, null);
		cyl.mulTranslation(new Vector3f(0.0f, 100.0f, 0.0f));
		coordinate.addChild(cyl);

		MyCylinder czl = new MyCylinder(3.0f, 1.0f, mat, null);
		czl.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f));
		czl.mulTranslation(new Vector3f(0.0f, 0.0f, 100.0f));
		coordinate.addChild(czl);

	}


	static void set_vector(Material mat){

		MyCone vx = new MyCone(3.0f, 3.0f, mat, null);
		vx.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, -(float)Math.PI/2.0f));
		vx.mulTranslation(new Vector3f(120.0f, 0.0f, 0.0f));
		coordinate.addChild(vx);

		MyCone vy = new MyCone(3.0f, 3.0f, mat, null);
		vy.mulTranslation(new Vector3f(0.0f, 120.0f, 0.0f));
		coordinate.addChild(vy);

		MyCone vz = new MyCone(3.0f, 3.0f, mat, null);
		vz.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f));
		vz.mulTranslation(new Vector3f(0.0f, 0.0f, 120.0f));
		coordinate.addChild(vz);

	}

	static void set_font(Material mat, Font font){

		MyText3D fx = new MyText3D("x[μm]", font, mat, null, MyText3D.ALIGN_CENTER);
		fx.mulScale(new Vector3f(10.0f, 10.0f, 10.0f));
		fx.mulTranslation(new Vector3f(140.0f, 0.0f, 0.0f));

		MyText3D fy = new MyText3D("y[μm]", font, mat, null, MyText3D.ALIGN_CENTER);
		fy.mulScale(new Vector3f(10.0f, 10.0f, 10.0f));
		fy.mulTranslation(new Vector3f(0.0f, 140.0f, 0.0f));

		MyText3D fz = new MyText3D("z[μm]", font, mat, null, MyText3D.ALIGN_CENTER);
		fz.mulScale(new Vector3f(10.0f, 10.0f, 10.0f));
		fz.mulTranslation(new Vector3f(0.0f, 0.0f, 140.0f));


		MyTransformGroup bx = new MyTransformGroup();
		bx.addChild(fx);
		MyTransformGroup targetx = new MyTransformGroup();
		targetx.addChild(bx);
		Point3f axisx = new Point3f(140.0f, 0.0f, 0.0f);
		new MyBillboard(targetx, axisx);
		coordinate.addChild(targetx);

		MyTransformGroup by = new MyTransformGroup();
		by.addChild(fy);
		MyTransformGroup targety = new MyTransformGroup();
		targety.addChild(by);
		Point3f axisy = new Point3f(0.0f, 140.0f, 0.0f);
		new MyBillboard(targety, axisy);		
		coordinate.addChild(targety);

		MyTransformGroup bz = new MyTransformGroup();
		bz.addChild(fz);
		MyTransformGroup targetz = new MyTransformGroup();
		targetz.addChild(bz);
		Point3f axisz = new Point3f(0.0f, 0.0f, 140.0f);
		new MyBillboard(targetz, axisz);		
		coordinate.addChild(targetz);

	}

	static void set_mark(Material mat, Font font){

		MyText3D fxl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER);
		fxl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f));
		fxl.mulTranslation(new Vector3f(100.0f, 5.0f, 5.0f));
		MyText3D fyl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER);
		fyl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f));
		fyl.mulTranslation(new Vector3f(5.0f, 100.0f, 5.0f));
		MyText3D fzl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER);
		fzl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f));
		fzl.mulTranslation(new Vector3f(5.0f, 5.0f, 100.0f));

		MyTransformGroup bxl = new MyTransformGroup();
		bxl.addChild(fxl);
		MyTransformGroup targetxl = new MyTransformGroup();
		targetxl.addChild(bxl);
		Point3f axisxl = new Point3f(100.0f, 0.0f, 0.0f);
		new MyBillboard(targetxl, axisxl);
		coordinate.addChild(targetxl);

		MyTransformGroup byl = new MyTransformGroup();
		byl.addChild(fyl);
		MyTransformGroup targetyl = new MyTransformGroup();
		targetyl.addChild(byl);
		Point3f axisyl = new Point3f(0.0f, 100.0f, 0.0f);
		new MyBillboard(targetyl, axisyl);		
		coordinate.addChild(targetyl);

		MyTransformGroup bzl = new MyTransformGroup();
		bzl.addChild(fzl);
		MyTransformGroup targetzl = new MyTransformGroup();
		targetzl.addChild(bzl);
		Point3f axiszl = new Point3f(0.0f, 0.0f, 100.0f);
		new MyBillboard(targetzl, axiszl);		
		coordinate.addChild(targetzl);

	}

	Coordinate(){

		coordinate = new MyTransformGroup();
		Material mat = new Material();
		mat.setDiffuseColor(new Color3f(1.0f, 1.0f, 1.0f));
		Font font = new Font("SansSerif", Font.BOLD, 1);

		Coordinate.set_coordinate(mat);
		Coordinate.set_label(mat);
		Coordinate.set_vector(mat);
		Coordinate.set_font(mat, font);
		Coordinate.set_mark(mat, font);
	}

}