Нарушения в сплайн-диаграмме Qml - PullRequest
0 голосов
/ 30 декабря 2018

При создании сплайн-диаграммы внутри диаграммы появляются петли, а некоторые ее части выходят за пределы панели диаграммы.Пожалуйста, найдите ниже код

 ChartView {
    title: "Spline"
    anchors.fill: parent
    antialiasing: true

    SplineSeries {
        name: "SplineSeries"
        XYPoint { x: 154593917; y: 612.5 }
        XYPoint { x: 154594277; y: 425 }
        XYPoint { x: 154594632; y: 437 }
        XYPoint { x: 154594997; y: 460 }
        XYPoint { x: 154595357; y: 506 }
        XYPoint { x: 154596073; y: 513 }
        XYPoint { x: 154596437; y: 527 }
        XYPoint { x: 154596797; y: 575 }
        XYPoint { x: 154597517; y: 632 }
        XYPoint { x: 154597877; y: 369 }
        XYPoint { x: 154598237; y: 410 }
        XYPoint { x: 154598851; y: 414 }
        XYPoint { x: 154604971; y: 633 }
        XYPoint { x: 154605331; y: 598 }
        XYPoint { x: 154605400; y: 500 }
    }
}

Как удалить этот цикл?Пожалуйста, помогите

enter image description here

1 Ответ

0 голосов
/ 30 января 2019

Проблема заключается в том, что SplineSeries создает, ну, в общем, сплайн (кусочно-полиномы) для интерполяции ваших точек.QtCharts не предоставляет никакого контроля над параметрами сплайна, такими как степень, контрольные точки и т. Д. Все они автоматически вычисляются из набора данных.

Вам следует позаботиться о природе сплайна: они будут проходят через точки данных, но остальные точки будут аппроксимированы скрытой полиномиальной функцией, поэтому создается неожиданных точек .Чтобы создать кусочную кривую, должны быть выполнены некоторые ограничения, такие как C ^ 0, C ^ 1 и C ^ 2 непрерывность (в предположении кубического сплайна).Чтобы соответствовать им в вашем случае, кривая должна loop .

QtCharts не предоставляет слишком много опций построения XY, в основном ScatterSeries (отображает отдельные точки), LineSeries (линейныйинтерполяция, без параметров сглаживания) и SplineSeries (сглаживание, интерполяция по сплайну).

Чтобы использовать другую, просто замените noe SplineSeries на LineSeries.Вот вам пример того, как они выглядят с вашими данными:

series comparison

В качестве промежуточного решения вы можете предварительно обработать данные, используя некоторые другиеметод интерполяции, который лучше адаптируется к вашим требованиям (например, составные кривые Безье ), а затем оценивает кривую в большем количестве точек, чтобы создать более гладкие данные, более удобные с SplineSeries или, если он выглядит достаточно хорошодля вас, это может быть визуализировано напрямую, используя LinesSeries.

...