void GlidePolarTest::TestBallast() { polar.SetBallast(fixed(0.25)); ok1(equals(polar.GetBallastLitres(), 25)); ok1(equals(polar.GetBallast(), 0.25)); polar.SetBallastLitres(fixed(50)); ok1(equals(polar.GetBallastLitres(), 50)); ok1(equals(polar.GetBallast(), 0.5)); ok1(equals(polar.GetTotalMass(), 368)); ok1(equals(polar.GetWingLoading(), 37.551020408)); ok1(polar.HasBallast()); fixed loading_factor = sqrt(polar.GetTotalMass() / polar.reference_mass); ok1(equals(polar.polar.a, polar.ideal_polar.a / loading_factor)); ok1(equals(polar.polar.b, polar.ideal_polar.b)); ok1(equals(polar.polar.c, polar.ideal_polar.c * loading_factor)); ok1(equals(polar.SinkRate(Units::ToSysUnit(fixed(80), Unit::KILOMETER_PER_HOUR)), 0.640739)); ok1(equals(polar.SinkRate(Units::ToSysUnit(fixed(120), Unit::KILOMETER_PER_HOUR)), 0.928976)); ok1(equals(polar.SinkRate(Units::ToSysUnit(fixed(160), Unit::KILOMETER_PER_HOUR)), 1.722908)); ok1(equals(polar.GetVMin(), 21.44464)); ok1(equals(polar.GetVBestLD(), 27.78703)); polar.SetBallast(fixed(0)); ok1(!polar.HasBallast()); }
void GlidePolarTest::TestBasic() { polar.Update(); ok1(equals(polar.polar.a, polar.ideal_polar.a)); ok1(equals(polar.polar.b, polar.ideal_polar.b)); ok1(equals(polar.polar.c, polar.ideal_polar.c)); ok1(equals(polar.SinkRate(Units::ToSysUnit(fixed(80), Unit::KILOMETER_PER_HOUR)), 0.606)); ok1(equals(polar.SinkRate(Units::ToSysUnit(fixed(120), Unit::KILOMETER_PER_HOUR)), 0.99)); ok1(equals(polar.SinkRate(Units::ToSysUnit(fixed(160), Unit::KILOMETER_PER_HOUR)), 1.918)); ok1(equals(polar.GetSMax(), polar.SinkRate(polar.GetVMax()))); ok1(equals(polar.GetVMin(), 19.934640523)); ok1(equals(polar.GetSMin(), polar.SinkRate(polar.GetVMin()))); ok1(equals(polar.GetVTakeoff(), polar.GetVMin() / 2)); ok1(equals(polar.GetVBestLD(), 25.830434162)); ok1(equals(polar.GetSBestLD(), polar.SinkRate(polar.GetVBestLD()))); ok1(equals(polar.GetBestLD(), polar.GetVBestLD() / polar.GetSBestLD())); ok1(equals(polar.GetTotalMass(), 318)); ok1(equals(polar.GetWingLoading(), 32.448979592)); ok1(equals(polar.GetBallast(), 0)); ok1(equals(polar.GetBallastLitres(), 0)); ok1(polar.IsBallastable()); ok1(!polar.HasBallast()); }
static void SetButtons() { WndButton* wb; if ((wb = (WndButton *)wf->FindByName(_T("cmdDump"))) != NULL) { wb->set_visible(glide_polar.HasBallast()); wb->SetCaption(XCSoarInterface::GetComputerSettings().ballast_timer_active ? _("Stop") : _("Dump")); } }
static void OnBallastData(DataField *Sender, DataField::DataAccessKind_t Mode) { DataFieldFloat &df = *(DataFieldFloat *)Sender; switch (Mode) { case DataField::daSpecial: SetBallastTimer(glide_polar.HasBallast() && !XCSoarInterface::GetComputerSettings().ballast_timer_active); break; case DataField::daChange: glide_polar.SetBallastLitres(df.GetAsFixed()); changed = true; SetButtons(); SetBallast(); break; } }