关于给定点的三次贝塞尔曲线的最近点

时间:2014-05-25 18:39:33

标签: c++ math curve bezier

我的立方贝塞尔曲线定义为A,B,C,D。其中A是起点,B和C是控制点,D是结束。我理解如何在任何值t处找到位置,其中0 <= t <= 1,并且该概念通常是因为它仅使用对导致曲线的线性插值函数的少数调用。 (可以在标题高阶曲线下面轻松地here on wikipedia显示)

我现在希望在曲线上找到一个最接近空间某点的点,P。谷歌引导我进行多次讨论,但没有一个能触发我大脑中的神经元去#o; ooh !&#34;实际上,说实话,他们都飞过我的脑袋。我的数学知识必须比我想要的更有限,并且在提到衍生物时会变得碎片化。

以下是Google带领我的一些地方:

gamedev.net

stackoverflow.com (quadratic)

stackoverflow.com (close but I don't understand it)

其中包括ActionScript中的一个实现,我似乎无法再次挖掘,我知道我在这里的答案/评论中找到了它...

有没有人有知识和耐心帮助这些信息点击我的大脑?我正在考虑做足够接近&#34;接近并使用线上最近的点,并以非常小的步长迭代曲线。这将很慢,准确性将会丢失。在我的特殊情况下,准确性不如速度那么令人担忧,但是,我觉得有两种方法可以同时拥有......

提前致谢。

1 个答案:

答案 0 :(得分:3)

正如cmaster所说,这导致五次多项式的求解找到六次多项式的最小值

它是2D还是3D并不重要。最小化的函数是六次多项式

f(t)=0.5*dot(p(t)-X,p(t)-X) such that 0<=t<=1

其中X是给定点,p(t)是多项式曲线,dot表示欧几里得标量积。 通过找到衍生物的所有根

可以实现最小化
f'(t)=dot(p'(t), p(t)-X)

在区间内并比较根的功能值和区间的终点。

还存在不使用导数的最小化方法,主要用于比多项式更复杂的函数。参见例如

中的第5章

Brent,R。P.(1973),Algorithms for Minimization without Derivatives,Englewood Cliffs,NJ:Prentice-Hall,ISBN 0-13-022335-2

(然而,这本书包含有关衍生物和泰勒多项式的广泛部分)。该方法或其主要思想也可以在&#34;数字配方&#34;为"golden section search"