我有一个由直线段和圆弧组成的任意闭合轮廓(2D)。轮廓与半径和位置已知的圆相交。对于我正在工作的动态模型,我需要根据以下规则知道被圆包围的轮廓部分与一般圆之间的平均距离:
想象一条绕着圆扫过的径向线。当它扫过圆的内部区域时,它最终会遇到轮廓。外圆(黑色)与其与径向线(紫色)相交的轮廓(蓝色)之间的距离被计为高度(金色)。更简洁地说,这是沿着最大以大圆形边界为界的径向线的轮廓高度(请注意,我需要整个有界轮廓的平均高度,而不仅仅是单个点的高度)。
我会在任何平台上听取建议,但我的系统目前是用 Python 构建的。
用极坐标形式表达直线或圆弧并不困难。这样做可以得到线段上每个点的径向距离。例如,对于具有任意点 (xi, yi) 和斜率 m,
的直线r = (yi - (m)xi) / (sin(θ) - (m)cos(θ))
高度 h(θ) 给出为 R - r。然而,这只是单个角度 θ 处的高度。我实际上需要平均值,它作为上面的积分给出:
1 / (b-a) ∫ba(R - r)dθ
对此的分析解决方案有
圆弧的方程更加复杂。由于作为实时系统的一部分需要多次检查该高度,因此速度是必要的考虑因素。多次计算该解决方案可能会使其变得不可行。我希望找到一种将解推广到直线或弧的方法,而不需要数值求解数万个积分。
为了将来解决这个问题,我最终使用以下过程进行了强力距离计算:
这不是最优雅的,并且(像任何近似方法一样)很容易出错。但这对于我的情况来说已经足够了。我很想知道任何更好的、分析得出的算法来完成同样的事情!