Files
DynamicDataDisplay/Charts/Axes/TimeSpan/TimeSpanToDoubleConversion.cs
2024-02-23 00:46:06 -05:00

45 lines
1.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Microsoft.Research.DynamicDataDisplay.Charts
{
internal sealed class TimeSpanToDoubleConversion
{
public TimeSpanToDoubleConversion(TimeSpan minSpan, TimeSpan maxSpan)
: this(0, minSpan, 1, maxSpan)
{ }
public TimeSpanToDoubleConversion(double min, TimeSpan minSpan, double max, TimeSpan maxSpan)
{
this.min = min;
this.length = max - min;
this.ticksMin = minSpan.Ticks;
this.ticksLength = maxSpan.Ticks - ticksMin;
}
private double min;
private double length;
private long ticksMin;
private long ticksLength;
internal TimeSpan FromDouble(double d)
{
double ratio = (d - min) / length;
long ticks = (long)(ticksMin + ticksLength * ratio);
ticks = MathHelper.Clamp(ticks, TimeSpan.MinValue.Ticks, TimeSpan.MaxValue.Ticks);
return new TimeSpan(ticks);
}
internal double ToDouble(TimeSpan span)
{
double ratio = (span.Ticks - ticksMin) / (double)ticksLength;
return min + ratio * length;
}
}
}