让我们将曲线定义为一组二维点,这些点可以计算为任意精度。例如,这是一条曲线:
c++ - 哪种算法或想法可以找到一组曲线的凸包络?-LMLPHP
给定一组N条相交曲线(N可以任意大),如下图所示:
c++ - 哪种算法或想法可以找到一组曲线的凸包络?-LMLPHP
如何找到由曲线集分隔的连接区域(如有必要,提供边界框)的周长;或者,根据上面的示例,红色曲线?注意周长可以是凹的,并且没有明显的参数化。
c++ - 哪种算法或想法可以找到一组曲线的凸包络?-LMLPHP
可以给出红色曲线的起点
我对建立一个通用算法的有效方法感兴趣,但是。。。
我在C++中编码,我可以使用任何开源库来帮助这个
我不知道这个问题是否有名字,或者是否有现成的解决方案,以防让我知道,我将编辑标题和标签。
附加说明:
这个解是唯一的,因为在感兴趣的区域中,只有一个没有任何曲线的连接区域,但是我当然只能计算有限数量的曲线。
曲线最初是参数化的(然后应用仿射变换),所以我可以添加任意多的点我能计算出距离,长度和它们一起。交叉口也是可行的基本上,任何可以从点坐标建立的几何操作都是可以接受的。
我发现在“切割”齿轮时也会遇到类似的问题,例如https://scialert.net/fulltext/?doi=jas.2014.362.367,但我仍然不知道如何以一种体面有效的方式来解决它。

最佳答案

如果曲线是按顺序给定的,则可以找到连续曲线之间的成对交点。根据它们的性质,可以采用解析或数值解。
然后包络线的第一近似是通过这些点的折线。
另一个近似可以通过绘制连续切线的公共切线,并通过相交这些切线来获得。反正普通切线问题更难。
如果曲线方程是已知的单参数方程,则可以通过求解微分方程来找到包络曲线,该微分方程是通过消除曲线隐式方程与该微分方程之间的参数而得到的你可以用数值积分这个方程。

关于c++ - 哪种算法或想法可以找到一组曲线的凸包络?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56940853/

10-15 03:56