void ChartRenderer::ScaleXFromData(const LeastSquares &lsdata) { if (lsdata.IsEmpty()) return; if (x.unscaled) { x.min = lsdata.GetMinX(); x.max = lsdata.GetMaxX(); x.unscaled = false; } else { x.min = std::min(x.min, lsdata.GetMinX()); x.max = std::max(x.max, lsdata.GetMaxX()); } x.scale = (x.max - x.min); if (x.scale > 0) x.scale = (rc.right - rc.left - padding_left) / x.scale; }
void ChartRenderer::DrawTrend(const LeastSquares &lsdata, ChartLook::Style style) { if (!lsdata.HasResult()) return; if (x.unscaled || y.unscaled) return; auto xmin = lsdata.GetMinX(); auto xmax = lsdata.GetMaxX(); auto ymin = lsdata.GetYAtMinX(); auto ymax = lsdata.GetYAtMaxX(); DrawLine(xmin, ymin, xmax, ymax, look.GetPen(style)); }
/** * Convert a #LeastSquares to a #WaveInfo. Returns * WaveInfo::Undefined() if there is no valid result in the * #LeastSquares instance. */ gcc_pure static WaveInfo GetWaveInfo(const LeastSquares &ls, const FlatProjection &projection, double time) { if (!ls.HasResult()) return WaveInfo::Undefined(); const FlatPoint flat_location(ls.GetMiddleX(), ls.GetAverageY()); const GeoPoint location(projection.Unproject(flat_location)); const GeoPoint a(projection.Unproject(FlatPoint(ls.GetMinX(), ls.GetYAtMinX()))); const GeoPoint b(projection.Unproject(FlatPoint(ls.GetMaxX(), ls.GetYAtMaxX()))); Angle bearing = a.Bearing(b); Angle normal = (bearing + Angle::QuarterCircle()).AsBearing(); return {location, a, b, normal, time}; }