Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry B直线,到线段的距离,比到曲线上点的距离更简单?_Geometry_Interpolation_Bspline - Fatal编程技术网

Geometry B直线,到线段的距离,比到曲线上点的距离更简单?

Geometry B直线,到线段的距离,比到曲线上点的距离更简单?,geometry,interpolation,bspline,Geometry,Interpolation,Bspline,给定: 由连接的bezier曲线生成的样条曲线 一点 所需: 查找样条曲线中离该点最近的一条贝塞尔曲线 解决方案: 迭代查找每条贝塞尔曲线上的最近点,并选择具有整体最近点的曲线。 问题: 如果不需要曲线上的精确点,有没有更简单的方法来实现这一点? 例如,一个用于比较两条贝塞尔曲线到给定点(从其控制点算起)的距离的操作符? 我不需要知道到曲线A,B,C的距离。。。我“只”需要按照曲线的相对距离对曲线进行排序。(->找到最近的曲线,而不是最近的点。) 谢谢 可以找到点与曲线边界框之间的最小距

给定:
由连接的bezier曲线生成的样条曲线
一点

所需:
查找样条曲线中离该点最近的一条贝塞尔曲线

解决方案:
迭代查找每条贝塞尔曲线上的最近点,并选择具有整体最近点的曲线。

问题:
如果不需要曲线上的精确点,有没有更简单的方法来实现这一点? 例如,一个用于比较两条贝塞尔曲线到给定点(从其控制点算起)的距离的操作符?
我不需要知道到曲线A,B,C的距离。。。我“只”需要按照曲线的相对距离对曲线进行排序。(->找到最近的曲线,而不是最近的点。)


谢谢

可以找到点与曲线边界框之间的最小距离和最大距离。这两个距离应为点与曲线之间实际距离的下限和上限。所以,你有


MinDist(p,Bbox(C1))我们可以假设你指的是Catmull-Rom样条线的等价形式吗?也就是说,贝塞尔控制点是从上一条和下一条曲线衍生出来的吗?你的意思是“从上一条和下一条样条点衍生出来的”?那么是的。它主要是像这里这样实现的straigthforward。粘合连接点并匹配一阶和二阶导数。对于初学者,您只能选择边界区域最近(或重叠)的曲线。然后对这些曲线进行多次迭代细分,并计算距离。如果你有相等的距离,那么你的解决方案包括多条曲线。实际上,找到最近的曲线不需要实际距离。在1次曲线细分后,您知道曲线的哪一侧最近(或在特殊情况下两者都最近)。可以继续对所有线段进行细分,直到距离增量小于到最近曲线的距离差。细分曲线只会使控制多边形更接近曲线。但到控制多边形的最小距离并不一定意味着到曲线的最小距离。我们的想法是将曲线X的“控制多边形”移动到靠近点p的位置,只要前面的delta>distance-to-point-on-cloest-curve-Y不变。如果不再是这种情况,X不会比Y近,所以实际上你不需要X的精确最近点,因为你知道下一个细分永远不会靠近Y。