public static List <RatioSection> GetSectionsFromData(bool isInterregional, List <IVariable> data) { var segements = data.Count; List <RatioSection> list = new List <RatioSection>(); var sum_ratio = 0.0; double ratio; if (isInterregional) { ratio = 1.00 / segements; } else { ratio = 1.0 / (segements - 1); sum_ratio = -ratio / 2; } for (int i = 0; i < segements; i++) { RatioSection section = new RatioSection(); section.Left = sum_ratio; sum_ratio += ratio; section.Right = sum_ratio; var current = section.Left + ratio / 2; if (current > 1) { current = 1; } section.Current = current; section.CurrentData = data[i]; list.Add(section); } return(list); }
/// <summary> /// 该方法是否通用? /// </summary> /// <param name="isInterregional"></param> /// <param name="ratios"></param> /// <param name="data"></param> /// <returns></returns> public static List <RatioSection> GetSectionsFromRatioCrood(bool isInterregional, List <double> ratios, List <IVariable> data) { List <RatioSection> list = new List <RatioSection>(); if (isInterregional) { ratios.Insert(0, 0); for (int i = 0; i < ratios.Count - 1; i++) { var item = ratios[i]; RatioSection section = new RatioSection(); section.Left = item; section.Right = ratios[i + 1]; section.Current = (section.Left + section.Right) / 2; section.CurrentData = i < data.Count ? data[i] : Value.Bad; list.Add(section); } } else { for (int i = 0; i < ratios.Count; i++) { var item = ratios[i]; RatioSection section = new RatioSection(); section.Current = item;// section.Left + section.Right - section.Left / 2; section.CurrentData = i < data.Count ? data[i] : Value.Bad; section.Left = i - 1 > 0 ? (ratios[i - 1] + item) / 2 : item - ratios[i + 1] / 2; section.Right = i + 1 < ratios.Count ? (ratios[i + 1] + item) / 2 : item + ratios[i - 1] / 2; list.Add(section); } } return(list); }
public static List <RatioSection> GetSectionsFromRatioCroodAndSection(ValueSection range_section, DiscreteAxis xAxis, bool isInterregional, List <double> ratios, List <IVariable> data) { List <RatioSection> list = new List <RatioSection>(); ratios = new List <double>(ratios); var ratios_temp = ratios; var last = data.Last(); if (data.Count == 1 && range_section.Contains(last)) { var position = xAxis.IntervalPositioning(range_section, last, 1); ratios.Add(position); } if (isInterregional) { ratios.Insert(0, 0); for (int i = 0; i < ratios.Count - 1; i++) { var item = ratios[i]; RatioSection section = new RatioSection(); section.Left = item; section.Right = ratios[i + 1]; section.Current = (section.Left + section.Right) / 2; section.CurrentData = i < data.Count ? data[i] : Value.Bad; list.Add(section); } } else { for (int i = 0; i < ratios_temp.Count; i++) { var item = ratios[i]; RatioSection section = new RatioSection(); section.Current = item;// section.Left + section.Right - section.Left / 2; section.CurrentData = i < data.Count ? data[i] : Value.Bad; section.Left = i - 1 >= 0 ? (ratios[i - 1] + item) / 2 : item - ratios[i + 1] / 2; section.Right = i + 1 < ratios.Count ? (ratios[i + 1] + item) / 2 : item + ratios[i - 1] / 2; list.Add(section); } } return(list); }
public static List <RatioSection> GetSectionsFromData(bool isInterregional, DiscreteAxis xAxis, List <ValueSection> sections, List <IVariable> data) { List <RatioSection> list = new List <RatioSection>(); var valueCroodRatios = new List <double>(); //需要清理 bool isAddedForecast = false; if (data.Count == 1) { var index2 = 0; foreach (var section in sections) { if (section.Contains(data[0])) { var position = xAxis.IntervalPositioning(section, data[0], 0) * section.SectionRatio; var ratioCrood = position + sections.Take(index2).Select(it => it.SectionRatio).Sum(); valueCroodRatios.Add(ratioCrood); var position2 = xAxis.IntervalPositioning(section, data[0], 1) * section.SectionRatio; var ratioCrood2 = position2 + sections.Take(index2).Select(it => it.SectionRatio).Sum(); valueCroodRatios.Add(ratioCrood2); isAddedForecast = true; break; } index2++; } } else { foreach (var item in data) { var index2 = 0; foreach (var section in sections) { if (section.Contains(item)) { var position = xAxis.IntervalPositioning(section, item, 0) * section.SectionRatio; var ratioCrood = position + sections.Take(index2).Select(it => it.SectionRatio).Sum(); valueCroodRatios.Add(ratioCrood); break; } index2++; } } } if (isInterregional) { valueCroodRatios.Insert(0, 1); for (int i = 0; i < valueCroodRatios.Count - 1; i++) { var item = valueCroodRatios[i]; RatioSection section = new RatioSection(); section.Left = item; section.Right = valueCroodRatios[i + 1]; section.Current = section.Left + section.Right - section.Left / 2; section.CurrentData = i < data.Count ? data[i] : Value.Bad; list.Add(section); } } else { for (int i = 0; i < valueCroodRatios.Count; i++) { var item = valueCroodRatios[i]; RatioSection ratio_section = new RatioSection(); ratio_section.Current = valueCroodRatios[i];// section.Left + section.Right - section.Left / 2; ratio_section.CurrentData = i < data.Count ? data[i] : Value.Bad; ratio_section.Left = i > 0 ? (valueCroodRatios[i - 1] + item) / 2 : item - valueCroodRatios[i + 1] / 2; ratio_section.Right = i + 1 < valueCroodRatios.Count ? (valueCroodRatios[i + 1] + item) / 2 : item * 1.5 - valueCroodRatios[i - 1] / 2; list.Add(ratio_section); } } if (isAddedForecast) { list.RemoveAt(1); } return(list); }