void aircraftCombo_Changed(object sender, EventArgs e) { url = null; AircraftInfo ai = aircraftCombo.GetSelectedData() as AircraftInfo; if (ai != null) { AircraftParameters parameters = new AircraftParameters(); parameters.File = ai.ParFile; aircraftText.SetText(parameters.Description); if (!string.IsNullOrEmpty(parameters.IconFile)) { aircraftPicture.TextureFile = string.Concat(ai.Folder, parameters.IconFile); aircraftPicture.IsVisible = true; } else { aircraftPicture.IsVisible = false; } checkboxStartOnWater.IsVisible = parameters.HasFloats; checkboxStartOnWater.IsChecked = true; if (!string.IsNullOrEmpty(parameters.BuyUrl)) { url = string.Format("http://rcdeskpilot.com/aircraft/{0}", parameters.BuyUrl); buttonBuy.IsVisible = true; } else { buttonBuy.IsVisible = false; } } changed = true; //UpdateText(); }
public ModelControl(string filename, bool create) { reflection = new Reflection(); heightmap = new Heightmap(1000); heightmap.MinHeight = -5f; heightmap.MaxHeight = 5f; useAileronForRudder = Convert.ToBoolean(Bonsai.Utils.Settings.GetValue("UseAileronChannel")); AircraftParameters parameters = new AircraftParameters(); if (create) { parameters.CreateDefault(filename); } else { parameters.File = filename; } if (parameters.Version == 2) { iFlightModel = new FlightModelWind2(); } else { iFlightModel = new FlightModelWind(); } iFlightModel.AircraftParameters = parameters; iFlightModel.Heightmap = heightmap; iFlightModel.Paused = true; iFlightModel.Initialize(); airplaneModel = new AirplaneModel(iFlightModel); airplaneModel.Position = new Vector3(0, 0, 0); }
/// <summary> /// Calculates the total forces on the airframe. /// </summary> /// <param name="elapsedTime"></param> private void CalculateForces(float elapsedTime, Vector3 wind) { if (ApiModel.CalculateForces(elapsedTime, wind)) { return; } Lift = GetLiftForce(wind); Drag = GetDragForce(wind); double sideLift = GetSideLiftForce(wind); double sideDrag = GetSideDragForce(wind); double sideGroundResistance = 0; double groundResistance = 0; // verified : gravity, liftX, throttle, liftZ if (TouchedDown) { if ((ApiModel.Vx < 10f) && (ApiModel.Vx > 0.01)) { double realBeta = -Math.Atan2(ApiModel.Vy, ApiModel.Vx); sideGroundResistance = Math.Sin(realBeta) * gravityMass; } groundResistance = ApiModel.Vx / 10.0; } ApiModel.Fx = (float)(+sideLift * Math.Sin(ApiModel.Beta) - sideDrag * Math.Cos(ApiModel.Beta) - Lift * Math.Sin(ApiModel.Alpha) - Drag * Math.Cos(ApiModel.Alpha) + AircraftParameters.MaximumThrust * Throttle * AircraftParameters.GetThrustCoefficient((double)ApiModel.Vx) - gravityMass * Math.Sin(ApiModel.Pitch) - groundResistance); ApiModel.Fy = (float)(+sideLift * Math.Cos(ApiModel.Beta) + sideDrag * Math.Sin(ApiModel.Beta) + gravityMass * Math.Sin(ApiModel.Roll) * Math.Cos(ApiModel.Pitch) + sideGroundResistance); ApiModel.Fz = (float)(-Lift * Math.Cos(ApiModel.Alpha) - Drag * Math.Sin(ApiModel.Alpha) + gravityMass * Math.Cos(ApiModel.Roll) * Math.Cos(ApiModel.Pitch)); }
public AircraftParametersForm(AircraftParameters parameters) { this.parameters = parameters; InitializeComponent(); if (parameters.Version >= 2.0) { sliderControlSpinFactor.Visible = false; } UpdateValues(); }
private void UpdateText() { AircraftInfo ai = aircraftCombo.GetSelectedData() as AircraftInfo; if (ai != null) { AircraftParameters parameters = new AircraftParameters(); parameters.File = ai.ParFile; aircraftText.SetText(parameters.Description); } }
public void Initialize() { ApiAircraftParameters = AircraftParameters.CloneToApiParameters( ); ApiModel.AircraftParameters = ApiAircraftParameters; rhoSurface = _AirDensity * ApiAircraftParameters.WingArea / 2; rhoVerticalSurface = _AirDensity * ApiAircraftParameters.VerticalArea / 2; gravityMass = _Gravity * ApiAircraftParameters.Mass; ApiModel.OrientationQuat = Quaternion.RotationYawPitchRoll(0.0f, 0.0f, 0.0f); ApiModel.Initialize(); StartModel(); }
private void StartPlaying() { if (!string.IsNullOrEmpty(fileName)) { if (playing) { StopPlaying(); } file = File.OpenRead(fileName); binaryReader = new BinaryReader(file); aircraftParameters = new AircraftParameters(); aircraftParameters.ReadParameters(binaryReader.ReadString()); if (airplaneModel == null) { airplaneModel = new AirplaneModel(this); } playing = true; startTime = -1; relativeTime = 0; previousState = new AirplaneState(); nextState = new AirplaneState(); nextTime = binaryReader.ReadDouble(); nextState.Read(binaryReader); currentState.Gear = nextState.Gear; currentState.Flaps = nextState.Flaps; if (currentState.Gear) { Gear = 1.0; } if (currentState.Flaps) { Flaps = 1.0; } airplaneModel.StartEngine(); } }
/// <summary> /// Calculates the drag force generated by the fuselage and vertical tail. /// </summary> /// <returns></returns> private double GetSideDragForce() { return(AircraftParameters.GetSideDragCoefficient(Beta) * (Vx * Vx + Vy * Vy) * rhoVerticalSurface); }
/// <summary> /// Calculates the drag force. /// </summary> /// <returns></returns> private double GetDragForce() { // F = (1/2)*Dc*V^2*S return(AircraftParameters.GetDragCoefficient(Alpha) * (Vx * Vx + Vz * Vz) * rhoSurface); }