Мне нужно иметь возможность рисовать последовательные сегменты линии, которые имеют одинаковую координату 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);
}
}
Однако создание нескольких участков, использующих заливку, сильно замедляет приложение. Мне было интересно, могу ли я ограничить, насколько я это делаю? Я не смог найти способ изменить интерполяцию для раздела? Это просто проблема с основным сюжетом или что-то не так с моей логикой или кодом?
Я не уверен, как это сработает, вы могли бы объяснить дальше? – CubanAzcuy
Например, если у вас есть точки в x = 0, 1, 2 и 3, и вам нужна кривая между 1 и 2, вставьте точки (например) 1.25 (@ index 2), 1.5 (@ 3) и 1.75 (@ 4) и переместите точки на 2 и 3 в индексы 5 и 6. –