【问题标题】:Spline in QT with QPainterPath through just control points通过仅控制点在 QT 中使用 QPainterPath 样条线
【发布时间】:2023-02-23 05:47:40
【问题描述】:

我必须根据 dxf 文件中的数据在 qt 中实现样条绘图。关于样条曲线的数据总是只包含控制点的坐标。

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

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

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

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

【问题讨论】:

  • @jr_w 如下所述,有几种可能性。一种是通过 mouseMoveEvent 识别每个控制点并在输入表单时激活鼠标跟踪。你看过qt creatorAffine Transformations中的例子吗?也许这会对你有所帮助。那样的话,他们就不用做很多计算了。
  • 你怎么称呼“适合点”?

标签: c++ algorithm qt math spline


【解决方案1】:

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

请参阅link 以获取 alglib 支持的函数列表及其简短描述。

This one 已获得 LGPL 许可,但可以说,您得到的是您所支付的,因为没有支持,也不能保证这会真正起作用。 (而且它是以一种非常学术的方式编写的,不值得被贴上“C++”的标签,而且它不做任何边界检查)

如果您不喜欢或不能使用商业图书馆,并且想“手工”完成,wikipedia(查看参考资料)可以满足您的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-16
    • 2012-03-12
    • 2022-01-19
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多