标题中提到的操作在许多计算机辅助设计(CAD)软件(例如AutoCAD)中很常见,称为圆角。但是,我发现在我自己的程序中实现这个功能真的很难。
我想到的方法是使用弧中心到曲线的切线的距离等于指定半径的条件。考虑到实际曲线是用分段非线性函数定义的,并且接触点可以在曲线上的任何位置,因此要获得解决方案并不容易。有什么好主意吗?
答案 0 :(得分:0)
鉴于您没有详细描述曲线的特征,很难找到特定/指定的算法,但让我们尝试一种描述性的方法:
取一个给定半径的圆圈并将其滚动到一条曲线上,直到圆圈接触到另一条曲线。
我假设您可以参数化曲线。
滚动圈子"沿着曲线,您需要切点(或者更好地表示法线,这当然是切线的法线)在点"滚动轨迹曲线"到圆切点。你有这个正常,你知道半径,你可以计算你的圆。你有圆圈,你可以看到它是否/在哪里与另一条曲线相交。
"滚动"的想法是将圆形不与另一条曲线相交的点与另一条相交的点(可能超过1个点)之间的解决方案(一条曲线上的切点参数)包括在内。 一旦你有了支架,在两个位置之间进行bisection method(二分搜索),直到你的圆圈变得足够切线"到另一条曲线(即与另一条曲线的交点非常接近,以至于它们低于可接受的epsilon)。
现在你将有两个点(每条曲线上有一个点)和实现解决方案的圆圈:只需保持此圆上的圆弧对应有意义的圆(基于两条切线的收敛或发散)。
答案 1 :(得分:0)
要找到弧形中心,您需要两个强大的战略算法:
AutoCAD用于查找圆弧中心的内容是偏移圆弧半径距离的两条曲线并与它们相交。根据曲线偏移方向,您可以轻松地在问题的所有可能解决方案之间切换。
此时,在切点处修剪曲线将是微不足道的。