2013-09-04 6 views
0

Мне нужно иметь возможность рисовать последовательные сегменты линии, которые имеют одинаковую координату Y с CPTScatterPlotInterpolationLinear и те, которые не имеют CPTScatterPlotInterpolationCurved. Как CPTScatterPlotInterpolationCurved рисует все линии изогнутыми. В настоящее время я делаю это, добавляя несколько графиков.основной участок Смешивание CPTScatterPlotInterpolationCurved и CPTScatterPlotInterpolationLinear

public List<CorrectedGraphPoints> GetCorrectDataPoints(List<PointF> dataSource) 
     { 
      int lastIndex = 0; 
      bool shouldLoop = true; 
      CPTScatterPlotInterpolation interpolation = CPTScatterPlotInterpolation.Curved; 
      List<CorrectedGraphPoints> OuterList = new List<CorrectedGraphPoints>(); 

      if (dataSource [0].Y == dataSource [1].Y) 
       interpolation = CPTScatterPlotInterpolation.Linear; 

      while (lastIndex+1 != dataSource.Count) { 
       OuterList.Add (new CorrectedGraphPoints (interpolation)); 

       while (shouldLoop) 
       { 

        OuterList[OuterList.Count -1].Add(dataSource[lastIndex]); 
        if ((lastIndex + 1) < dataSource.Count) { 
         if (interpolation == CPTScatterPlotInterpolation.Linear) { 
          if (dataSource [lastIndex].Y != dataSource [lastIndex + 1].Y) { 
           interpolation = CPTScatterPlotInterpolation.Curved; 
           shouldLoop = false; 
           break; 
          } 
         } 

         if (interpolation == CPTScatterPlotInterpolation.Curved) { 
          if (dataSource [lastIndex].Y == dataSource [lastIndex + 1].Y) { 
           interpolation = CPTScatterPlotInterpolation.Linear; 
           shouldLoop = false; 
           break; 
          } 
         } 
        } 
        else { 
         shouldLoop = false; 
         break; 
        } 

        if (shouldLoop) 
         lastIndex++; 
       } 

       shouldLoop = true; 
      } 

      return OuterList; 


     } 



public class CorrectedGraphPoints 
    { 
     private List<PointF> points; 
     public List<PointF> Points { get { return points; } } 

     private CPTScatterPlotInterpolation interpolation; 
     public CPTScatterPlotInterpolation Interpolation { get { return interpolation; } } 


     public CorrectedGraphPoints(CPTScatterPlotInterpolation interpolation) 
     { 
      this.interpolation = interpolation; 
      points = new List<PointF>(); 
     } 

     public void Add(PointF point) 
     { 
      points.Add (point); 
     } 
    } 

Однако создание нескольких участков, использующих заливку, сильно замедляет приложение. Мне было интересно, могу ли я ограничить, насколько я это делаю? Я не смог найти способ изменить интерполяцию для раздела? Это просто проблема с основным сюжетом или что-то не так с моей логикой или кодом?

ответ

0

Другим возможным решением могло бы стать добавление дополнительных точек к вашим данным для рисования криволинейных участков. Это позволит вам использовать только один сюжет. Количество дополнительных необходимых точек зависит от нескольких факторов, включая размер сюжета и стиль линии, используемый для рисования линии.

+0

Я не уверен, как это сработает, вы могли бы объяснить дальше? – CubanAzcuy

+0

Например, если у вас есть точки в x = 0, 1, 2 и 3, и вам нужна кривая между 1 и 2, вставьте точки (например) 1.25 (@ index 2), 1.5 (@ 3) и 1.75 (@ 4) и переместите точки на 2 и 3 в индексы 5 и 6. –

 Смежные вопросы

  • Нет связанных вопросов^_^