【问题标题】:Reverse engineering a bezier curve对贝塞尔曲线进行逆向工程
【发布时间】:2010-06-13 16:28:21
【问题描述】:

给定bézier curve 上的几个样本点,是否可以计算出这些点可能位于的一组可能曲线?

在我的特定应用程序中,曲线可能具有一组有限的端点,因此我想生成一组可能的曲线,枚举所有曲线并挑选出所有可能以有效端点结束的曲线。

有些人要求提供更多详细信息。 我有一组我知道在quadratic bezier 曲线上的点,我想计算曲线的公式并能够推断曲线上的新点。

【问题讨论】:

  • 使用单个贝塞尔曲线拟合点...当然可以完成(与使用函数拟合点的方式相同 - 贝塞尔曲线“是”一个函数)和链接提供已经谈到“RE”贝塞尔曲线
  • 是的,但我想知道这些点所在的所有可能曲线。从第一个点开始到最后一个点结束的曲线只是众多曲线中的一条。
  • 对于二次贝塞尔曲线,您要么只有一条曲线,要么少于曲线通过的四个点。此外,如果您有四个以上的独立点,您将无法找到一条通过所有这些点的二次贝塞尔曲线。

标签: algorithm language-agnostic math bezier


【解决方案1】:

贝塞尔曲线总是通过起点和终点控制点。

如果曲线的度数等于样本点的数量,那么只有一条曲线会通过所有点(在正常情况下,所有点都不同,并且它们不位于贝塞尔曲线)。

如果曲线的度数小于采样点的数量,那么一般情况下,你将无法使曲线通过所有点(在正常情况下)。

如果曲线的度数大于采样点的数量,那么,一般情况下,你可以画出无数条曲线。

wiki article 中,您只会找到对控制点的引用,但我仍然相信我正确地记住了上述属性并且它们也适用于曲线上的点。

我认为您需要重新定义您的问题并准确定义您需要哪种类型的曲线(以及哪种程度)。同样正如 Georg 指出的那样,您可能正在寻找路径 - 曲线的组合。

编辑: 首先,校正曲线定义为度数加上一个 控制点 点(二次需要三个)。控制点与曲线上的点不同 - 对于曲线上的三个点和二次曲线,您可以有无限数量的解决方案(有关二次曲线和四个点,请参阅 this

至于解决方案(但仍假设您正在查看一条曲线):

对于单个二次曲线的方程,您有

B(t) = (1-t)^2*P0 + 2*(1-t)*t*P1 + t^2*P2

上面的大写字母是向量,P0对应起始控制点(第一个点),P2对应结束控制点(最后一个点),所以还是需要找到P1。变量 t 是范围从 0 到 1 的标量。

如果使用 2D 曲线,上述向量方程为曲线上的每个点提供两个标量方程。

仍然有 t 作为未知数,所以你应该多取 2 个点(总共 4 个),这会给你 4 个未知数(t 代表第一个点,t 代表第二个点,P1 的 x 和 y,中间控制点) 和 4 个方程求解(每个样本点 2 个)。

用你最喜欢的数值方法解决这个问题,你会得到点来自的原始曲线。

如果您仍然认为可以获得更多曲线并且您将不得不选择一些东西,那么您不是在使用贝塞尔曲线,而是在使用 bezier splines(在某种意义上将多条曲线连接在一起)。仍然适用相同的原则,如果您从上述方程中找出解决单个曲线的方法(并且如果您有足够的点),那么您可以将问题划分为实际贝塞尔曲线的 n 段,并按上述方法求解。

如果事实证明您没有足够的积分,请再次查看链接的article - 您可能正在寻找最平滑的曲线,文章中提供了一些关于如何到达那里的建议作为寻找精确解(最短曲线/最平滑曲线)似乎相当复杂。

【讨论】:

  • 我在你问的问题中添加了一些额外的内容:)
  • 我在我提供的答案中添加了一些额外的内容:)
  • 谢谢,这看起来不错。我会在接下来的几天内尝试一下。
  • 如果我需要增加控制点,方程将如何变化?假设这里我们有 3 个,如果所讨论的点指的是具有 4 个控制点的贝塞尔曲线怎么办?
猜你喜欢
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多