2017-02-25 74 views
2

我有一个关于计算曲线贝塞尔控制的问题。问题是,如下图所示:如何用有损近似确定计算点的贝塞尔控制点?

Problem bezier curve

我有一个排序列表中的红点,包括C和D.我需要找到F和E的问题是,不是每个点有在曲线上(曲线不需要通过任何点,除了开始和结束)。它只是一个“近似”。

我已经阅读以下内容:

所以我就如何解决思路这就是:

  1. 通过C和d
  2. 如果点的个数是偶数计算从线的最远点,看看列表中的前一个和下一个点,确定哪一个是远离假想线并计算它们之间的中点
  3. 三点不足以得到曲线的形状,我需要的值在25%和75%。幸运的是,有几种方法可以确定:均匀间隔方法,弧长和离散方法。
  4. 现在我有5点(开始,25%,中,75%,结束)来描述我的曲线。我知道每个人的t值。曲线应该是这样的:

maybe solution

从此,我需要点莫名其妙地插入贝塞尔公式,然后反向计算控制点......怎么样?

在此先感谢您的任何提示。

回答

2

我写下了如何在"Creating a curve from three points"部分的“Bézier曲线入门”中做到这一点,尽管您可能还需要阅读前两节,因为它们解释了支持理论和代码。

重要信息是for any given t, there is a fixed point on the line {start,end} that connects to your on-curve point Bezier(t)。在下面的图片中,例如,点C总是与开始和结束的距离相同。根据您放置控制点的位置,曲线的样子并不重要:对于t=0.5C始终位于开始和结束之间的中间位置。此外,{C,Bezier(t)}和{Bezier(t),{}}的长度之间的比率是固定的,所以如果你知道第一个,你做了什么,那么你立即知道A去哪里,所以你有所有需要的信息。

enter image description here

就这样,只要你喜欢,你唯一的自由参数是切线在t,或者更准确地说,左,右插的距离,你可以重建曲线。没有超过三分,这几乎是一个猜测的价值,有几个“美学上令人满意”的选项,但没有一个适用于你的情况:你有一堆围绕你所选择的值的点,那么你可以对切线做出有根据的猜测基于你所选择的t值的点,并简单地重建立方贝塞尔使用它。

随着本地支柱在t

enter image description here

但考虑到你的数据,你可以得到一个更好的选择。

0

最简单的是最小二乘法逼近。如果B(t)是贝塞尔的方程,P 是近似点,叔是相应的参数值,要最大限度地减少LSQ = ∑ || B(吨 )-P i || = ∑ ((B X(吨)-P XI) +((B Ý(吨)-P 2 。)您可以将F和E的坐标作为变量,所以你送四个线性方程组,在四个变量:∂/∂ ˚F X(LSQ)= 0,∂/∂ ˚FÝ(LSQ)= 0,∂/∂ ë X(LSQ)= 0,∂/∂ ëÝ(LSQ)= 0。他们可以使用标准方法解决。要找到相应的参数值,您可以使用弦长近似法,该法给出了很好的结果:t i = || P i - P i-1 ||/total,total = || DP n || + ∑ || P i -P i-1 || (采取P = C)。如果您需要最佳近似值,则可以使用迭代算法来细化参数。

相关问题