algorithm - 逆向工程贝塞尔曲线

标签 algorithm language-agnostic math bezier

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

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

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

最佳答案

贝塞尔曲线将始终通过起始和结束控制点。

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

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

如果曲线的阶数大于样本点的数量,那么一般情况下,你将能够绘制出无限多条曲线。

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再次 - 您可能正在寻找最平滑的曲线,并且文章中有一些关于如何到达那里的建议,因为寻找精确的解决方案(最短曲线/最平滑曲线)似乎相当复杂。

关于algorithm - 逆向工程贝塞尔曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3032996/

相关文章:

java - Web Developer 想学习桌面编程

java - 在struts标签中划分时获取数字的ceil值

javascript - 查找落在特定区域内的二维数据点

algorithm - 检测与其余数据非常分散的点

algorithm - 如何在矩形的周长周围均匀分布点

algorithm - 计算比给定距离更近的点数

language-agnostic - 反序列化与解析

c++ - 照片拼接算法。如何在给定基本图像和瓷砖列表的情况下创建马赛克照片?

class - JVM 如何决定一个类 “belongs”(例如内部类或嵌套类)是否属于另一个类?

c++ - 如何检测椭圆是否与另一个椭圆/矩形碰撞