123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using System.Collections.Generic;
- using UnityEngine;
-
- namespace XCharts.Runtime
- {
- internal static class DataHelper
- {
- public static double DataAverage(ref List<SerieData> showData, SampleType sampleType,
- int minCount, int maxCount, int rate)
- {
- double totalAverage = 0;
- if (rate > 1 && sampleType == SampleType.Peak)
- {
- double total = 0;
- for (int i = minCount; i < maxCount; i++)
- {
- total += showData[i].data[1];
- }
- totalAverage = total / (maxCount - minCount);
- }
- return totalAverage;
- }
-
- public static double SampleValue(ref List<SerieData> showData, SampleType sampleType, int rate,
- int minCount, int maxCount, double totalAverage, int index, float dataChangeDuration,
- ref bool dataChanging, Axis axis, bool unscaledTime)
- {
- var inverse = axis.inverse;
- var minValue = axis.context.minValue;
- var maxValue = axis.context.maxValue;
- if (rate <= 1 || index == minCount)
- {
- if (showData[index].IsDataChanged())
- dataChanging = true;
-
- return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
- }
- switch (sampleType)
- {
- case SampleType.Sum:
- case SampleType.Average:
- double total = 0;
- var count = 0;
- for (int i = index; i > index - rate; i--)
- {
- count++;
- total += showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
- if (showData[i].IsDataChanged())
- dataChanging = true;
- }
- if (sampleType == SampleType.Average)
- return total / rate;
- else
- return total;
-
- case SampleType.Max:
- double max = double.MinValue;
- for (int i = index; i > index - rate; i--)
- {
- var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
- if (value > max)
- max = value;
-
- if (showData[i].IsDataChanged())
- dataChanging = true;
- }
- return max;
-
- case SampleType.Min:
- double min = double.MaxValue;
- for (int i = index; i > index - rate; i--)
- {
- var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
- if (value < min)
- min = value;
-
- if (showData[i].IsDataChanged())
- dataChanging = true;
- }
- return min;
-
- case SampleType.Peak:
- max = double.MinValue;
- min = double.MaxValue;
- total = 0;
- for (int i = index; i > index - rate; i--)
- {
- var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
- total += value;
- if (value < min)
- min = value;
- if (value > max)
- max = value;
-
- if (showData[i].IsDataChanged())
- dataChanging = true;
- }
- var average = total / rate;
- if (average >= totalAverage)
- return max;
- else
- return min;
- }
- if (showData[index].IsDataChanged())
- dataChanging = true;
-
- return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
- }
- }
- }
|