QT 中的样条线与 QPainterPath 仅通过控制点

问题描述 投票:0回答:1

我必须根据 dxf 文件中的数据在 qt 中实现样条线绘图。有关样条线的数据始终仅包含控制点的坐标。

A QPainterPath 函数 cubicTo() 使用当前点、终点(该点属于样条线)和 2 个控制点。当我想使用多个三次贝塞尔样条线通过 5 个或更多控制点构建样条线时,我不知道它们之间的拟合点(属于样条线)的坐标以使用 cubicTo()。另外,如果我在计算原始样条线上缺失的拟合点后组合多个三次样条线,我也不确定样条线的图像是否正确。

我可以使用什么算法在qt中通过超过4个控制点构建样条线,仅包含控制点信息,而不包含拟合点信息?

例如,解析我的 dxf 后,我得到标记为红色的控制点坐标: 一开始,我以为这些控制点是贝塞尔曲线的控制点。 我什至尝试过计算它们,但在这种情况下,贝塞尔曲线的控制点数量超过 6 个。我正在使用这个问题中的算法。 因此,我了解如何计算控制点,了解拟合点,但如何使用从 dxf 获得的点反向执行此操作。 如果您尝试使用来自图像样条线问题的计算算法,您将获得超过 6 个控制点,因此这是表征它的其他方式。

这是一张图片,显示了从该算法获得的数据与我拥有的数据之间的差异: 我需要什么数学来解决这个问题以及如何获得这些点的数学描述? 感谢您的帮助。

c++ algorithm qt math spline
1个回答
1
投票

您可以使用许多不同风格的三次插值算法(这似乎是您的目标:在文件中的控制点之间进行插值),其中许多都是在 alglib 中实现的。它是开源的,可用于多种编程语言,包括 C++。

请参阅此链接,了解 alglib 支持的函数列表及其简短描述。

这个是LGPL许可的,但是一分钱一分货,可以这么说,因为没有支持,也不能保证这实际上会起作用。 (而且它是以非常学术的方式编写的,不值得“C++”标签,并且它不做任何边界检查)

如果您不喜欢或不能使用商业库,并且想“手动”完成,wikipedia(检查参考资料)可以帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.