Qml样条图中的异常

Mas*_*han 6 charts qt spline qml

在创建样条图表时,它会在图表中获得循环,而某些部分则超出了图表面板.请找到以下代码

 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 }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何删除此循环?请帮忙

在此输入图像描述

cbu*_*art 5

问题来自于SplineSeries创建样条曲线(分段多项式)来插值点的事实。QtCharts 不提供对样条参数的任何控制,例如度数、控制点等。所有这些都是根据数据集自动计算的。

\n

您应该注意样条线的性质:它们将穿过数据点,但其余点将由底层多项式函数近似,因此会创建意外的点。为了创建分段曲线,必须满足一些约束,例如 C 0、C 1和 C 2 连续性(假设三次样条)。在你的情况下,曲线必须创建这些循环才能满足此类约束。

\n

QtCharts 不提供许多 XY 绘图选项:基本上ScatterSeries(绘制单点)、LineSeries(线性插值,没有平滑选项)和SplineSeries(平滑、基于样条线的插值)。

\n

要使用另一个节点,只需将节点替换SplineSeriesLineSeries。这里有一个示例,展示了它们与您的数据的外观:

\n

系列比较

\n

作为中点解决方案,您可以使用其他一些更适合您要求的插值方法(例如复合 B\xc3\xa8zier 曲线)来预处理数据,然后在更多点上评估曲线以创建更平滑的数据,更多与SplineSeriesor 友好,如果它看起来对你来说足够好,可以使用直接渲染LinesSeries

\n