当前位置: 首页>>代码示例>>C#>>正文


C# Orbit.getTruePositionAtUT方法代码示例

本文整理汇总了C#中Orbit.getTruePositionAtUT方法的典型用法代码示例。如果您正苦于以下问题:C# Orbit.getTruePositionAtUT方法的具体用法?C# Orbit.getTruePositionAtUT怎么用?C# Orbit.getTruePositionAtUT使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Orbit的用法示例。


在下文中一共展示了Orbit.getTruePositionAtUT方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: OptimizeEjection

		public static ManeuverParameters OptimizeEjection(ManeuverParameters original_maneuver, Orbit initial_orbit, Orbit target, double UT_arrival, double earliest_UT)
		{
			while(true)
			{
				alglib.minlmstate state;
				alglib.minlmreport rep;

				double[] x = new double[4];
				double[] scale = new double[4];

				x[0] = original_maneuver.dV.x;
				x[1] = original_maneuver.dV.y;
				x[2] = original_maneuver.dV.z;
				x[3] = 0;

				scale[0] = scale[1] = scale[2] = original_maneuver.dV.magnitude;
				scale[3] = initial_orbit.period;

				OptimizerData data = new OptimizerData();
				data.initial_orbit = initial_orbit;
				data.original_UT = original_maneuver.UT;
				data.UT_arrival = UT_arrival;
				data.pos_arrival = target.getTruePositionAtUT(UT_arrival);

				alglib.minlmcreatev(4, x, 0.01, out state);
				double epsx = 1e-4; // stop if |(x(k+1)-x(k)) ./ scale| <= EpsX
				double epsf = 0.01; // stop if |F(k+1)-F(k)| <= EpsF*max{|F(k)|,|F(k+1)|,1}
				alglib.minlmsetcond(state, 0, epsf, epsx, 50);
				alglib.minlmsetscale(state, scale);
				alglib.minlmoptimize(state, DistanceToTarget, null, data);
				alglib.minlmresults(state, out x, out rep);

				Debug.Log("Transfer calculator: termination type=" + rep.terminationtype);
				Debug.Log("Transfer calculator: iteration count=" + rep.iterationscount);

				// try again in one orbit if the maneuver node is in the past
				if (original_maneuver.UT + x[3] < earliest_UT)
				{
					Debug.Log("Transfer calculator: maneuver is " + (earliest_UT - original_maneuver.UT - x[3]) + " s too early, trying again in " + initial_orbit.period + " s");
					original_maneuver.UT += initial_orbit.period;
				}
				else
					return new ManeuverParameters(new Vector3d(x[0], x[1], x[2]), original_maneuver.UT + x[3]);
			}
		}
开发者ID:CliftonMarien,项目名称:MechJeb2,代码行数:45,代码来源:TransferCalculator.cs

示例2: UpdateFromOrbitAtUT

 public void UpdateFromOrbitAtUT(Orbit orbit, double UT, CelestialBody toBody)
 {
     pos = (orbit.getTruePositionAtUT(UT) - toBody.getTruePositionAtUT(UT)).xzy;
     vel = orbit.getOrbitalVelocityAtUT(UT) + orbit.referenceBody.GetFrameVelAtUT(UT) - toBody.GetFrameVelAtUT(UT);
     UpdateFromStateVectors(pos, vel, toBody, UT);
 }
开发者ID:Kerbas-ad-astra,项目名称:ThrottleControlledAvionics,代码行数:6,代码来源:OrbitDBG.cs

示例3: DistanceToTarget

		static void DistanceToTarget(double[] x, double[] fi, object obj)
		{
			OptimizerData data = (OptimizerData)obj;

			double t = data.original_UT + x[3];
			Vector3d DV = new Vector3d(x[0], x[1], x[2]);

			Orbit orbit = new Orbit();
			orbit.UpdateFromStateVectors(data.initial_orbit.getRelativePositionAtUT(t), data.initial_orbit.getOrbitalVelocityAtUT(t) + DV.xzy, data.initial_orbit.referenceBody, t);
			orbit.StartUT = t;

			var pars = new PatchedConics.SolverParameters();
			Vector3d pos;

			while(true)
			{
				Orbit next_orbit = new Orbit();
				PatchedConics.CalculatePatch(orbit, next_orbit, orbit.StartUT, pars, null);

				if (orbit.EndUT > data.UT_arrival)
				{
					pos = orbit.getTruePositionAtUT(data.UT_arrival);
					Vector3d err = pos - data.pos_arrival;

					fi[0] = err.x;
					fi[1] = err.y;
					fi[2] = err.z;
					return;
				}

				// As of 0.25 CalculatePatch fails if the orbit does not change SoI
				if (next_orbit.referenceBody == null)
				{
					next_orbit.UpdateFromOrbitAtUT(orbit, orbit.StartUT + orbit.period, orbit.referenceBody);
				}
				orbit = next_orbit;
			}
		}
开发者ID:CliftonMarien,项目名称:MechJeb2,代码行数:38,代码来源:TransferCalculator.cs


注:本文中的Orbit.getTruePositionAtUT方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。