private static double GetBrightness(ref RouteData Data, double TrackPosition)
{
double tmin = double.PositiveInfinity;
double tmax = double.NegativeInfinity;
double bmin = 1.0, bmax = 1.0;
for (int i = 0; i < Data.Blocks.Length; i++)
{
for (int j = 0; j < Data.Blocks[i].Brightness.Length; j++)
{
if (Data.Blocks[i].Brightness[j].TrackPosition <= TrackPosition)
{
tmin = Data.Blocks[i].Brightness[j].TrackPosition;
bmin = (double)Data.Blocks[i].Brightness[j].Value;
}
}
}
for (int i = Data.Blocks.Length - 1; i >= 0; i--)
{
for (int j = Data.Blocks[i].Brightness.Length - 1; j >= 0; j--)
{
if (Data.Blocks[i].Brightness[j].TrackPosition >= TrackPosition)
{
tmax = Data.Blocks[i].Brightness[j].TrackPosition;
bmax = (double)Data.Blocks[i].Brightness[j].Value;
}
}
}
if (tmin == double.PositiveInfinity & tmax == double.NegativeInfinity)
{
return 1.0;
}
else if (tmin == double.PositiveInfinity)
{
return (bmax - 1.0) * TrackPosition / tmax + 1.0;
}
else if (tmax == double.NegativeInfinity)
{
return bmin;
}
else if (tmin == tmax)
{
return 0.5 * (bmin + bmax);
}
else
{
double n = (TrackPosition - tmin) / (tmax - tmin);
return (1.0 - n) * bmin + n * bmax;
}
}