C++ 三次bezier曲线上到给定点的最近点

C++ 三次bezier曲线上到给定点的最近点,c++,math,curve,bezier,C++,Math,Curve,Bezier,我有一个三次贝塞尔曲线定义为a,B,C,D。其中a是起点,B和C是控制点,D是终点。我知道如何找到任意值t处的位置,其中0,正如cmaster所说,这导致了第五次多项式的解,以找到第六次多项式的最小值 f(t)=0.5*dot(p(t)-X,p(t)-X) such that 0<=t<=1 它是2D还是3D其实并不重要。最小化的函数是六次多项式 f(t)=0.5*dot(p(t)-X,p(t)-X) such that 0<=t<=1 在区间内,比较根的函数值和区间

我有一个三次贝塞尔曲线定义为a,B,C,D。其中a是起点,B和C是控制点,D是终点。我知道如何找到任意值t处的位置,其中0,正如cmaster所说,这导致了第五次多项式的解,以找到第六次多项式的最小值

f(t)=0.5*dot(p(t)-X,p(t)-X) such that 0<=t<=1
它是2D还是3D其实并不重要。最小化的函数是六次多项式

f(t)=0.5*dot(p(t)-X,p(t)-X) such that 0<=t<=1
在区间内,比较根的函数值和区间端点的函数值

也有不使用导数的最小化方法,主要用于比多项式更复杂的函数。例如,请参见中的第5章

布伦特,R.p.(1973),新泽西州恩格伍德悬崖:普伦蒂斯大厅,ISBN 0-13-022335-2


(尽管如此,这本书还是包含了关于导数和泰勒多项式的大量章节)。该方法或其主要思想也可以在“数字配方”中找到。

相关吗?看起来像是PostScription中的一个实现。您选择了一个非常复杂的问题来解释,而不使用派生。我甚至怀疑这个问题是否可以用一种数学上合理的方法来解决:我相信这将涉及到求解第五个根,并且没有封闭的公式来计算它()。所以,做一个近似值可能是你能做的最好的了。我前段时间研究过,结果是空的。显然,近似是我们能做的最好的了。@BlackBird在平面上还是在3d中?从技术上讲,我更喜欢3d,但我想它也可以在平面上工作?实际实施的是一条赛道,因此自然会有山丘和弯道。我现在倾向于使用暴力手段,尽管我真的很好奇。