Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
 public void AddAsixX(DiscreteAxis axis)
 {
     AxisXVisuals.Add(axis);
     Data.AddAxisX(axis);
 }