From 265e310a9c7dbac098449ee09bf80a8aeb5ae0ea Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Wed, 21 Dec 2011 18:56:39 +0000 Subject: [PATCH] Fix nan/inf values for Virtual Speed. --- src/TrainTool.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/TrainTool.cpp b/src/TrainTool.cpp index de9e5f654..4e02d9343 100644 --- a/src/TrainTool.cpp +++ b/src/TrainTool.cpp @@ -48,6 +48,8 @@ #include #endif +#include // isnan and isinf + TrainTool::TrainTool(MainWindow *parent, const QDir &home) : GcWindow(parent), home(home), main(parent) { setInstanceName("Train Controls"); @@ -939,7 +941,7 @@ void TrainTool::guiUpdate() // refreshes the telemetry // algorithm supplied by Tom Compton // from www.AnalyticCycling.com // 3.6 * ... converts from meters per second to kph - rtData.setVirtualSpeed(3.6f * ( + double vs = 3.6f * ( (-2*pow(2,0.3333333333333333)*(crr*m + g*m*sl)) / pow(54*pow(ad,2)*pow(cdA,2)*pw + sqrt(2916*pow(ad,4)*pow(cdA,4)*pow(pw,2) + @@ -949,8 +951,13 @@ void TrainTool::guiUpdate() // refreshes the telemetry sqrt(2916*pow(ad,4)*pow(cdA,4)*pow(pw,2) + 864*pow(ad,3)*pow(cdA,3)*pow(crr*m + g*m*sl,3)),0.3333333333333333)/ - (3.*pow(2,0.3333333333333333)*ad*cdA)) - ); + (3.*pow(2,0.3333333333333333)*ad*cdA)); + + // just in case... + if (isnan(vs) || isinf(vs)) vs = 0.00f; + + rtData.setVirtualSpeed(vs); + // go update the displays... main->notifyTelemetryUpdate(rtData); // signal everyone to update telemetry