分段边界截面与周围圆的平均距离

问题描述 投票:0回答:1

我有一个由直线段和圆弧组成的任意闭合轮廓(2D)。轮廓与半径和位置已知的圆相交。对于我正在工作的动态模型,我需要根据以下规则知道被圆包围的轮廓部分与一般圆之间的平均距离:

Radial line intersecting segmented profile within a circle.

想象一条绕着圆扫过的径向线。当它扫过圆的内部区域时,它最终会遇到轮廓。外圆(黑色)与其与径向线(紫色)相交的轮廓(蓝色)之间的距离被计为高度(金色)。更简洁地说,这是沿着最大以大圆形边界为界的径向线的轮廓高度(请注意,我需要整个有界轮廓的平均高度,而不仅仅是单个点的高度)。

我会在任何平台上听取建议,但我的系统目前是用 Python 构建的。

到目前为止我尝试过的:

用极坐标形式表达直线或圆弧并不困难。这样做可以得到线段上每个点的径向距离。例如,对于具有任意点 (xi, yi) 和斜率 m,

的直线

r = (yi - (m)xi) / (sin(θ) - (m)cos(θ))

高度 h(θ) 给出为 R - r。然而,这只是单个角度 θ 处的高度。我实际上需要平均值,它作为上面的积分给出:

1 / (b-a) ∫ba(R - r)dθ

对此的分析解决方案multiple trig operations and two square roots.

圆弧的方程更加复杂。由于作为实时系统的一部分需要多次检查该高度,因此速度是必要的考虑因素。多次计算该解决方案可能会使其变得不可行。我希望找到一种将解推广到直线或弧的方法,而不需要数值求解数万个积分。

geometry
1个回答
0
投票

为了将来解决这个问题,我最终使用以下过程进行了强力距离计算:

  1. 将轮廓的每个部分转换为极坐标表达式(在原点位于大圆中心的极坐标场上)。
  2. 找到与有界轮廓相对应的最大和最小角度。
  3. n 点处对有界角度范围进行采样,然后计算在每个角度 θn 处具有值的每条(或任何)线的径向距离。
  4. 对于每个 θn,找到返回的所有径向值。应该有一个偶数,类似于穿过轮廓的光线(每个径向点对应于进入或离开轮廓)。如果点数为奇数,则意味着轮廓在 θn 处以主圆为界,因此将主圆半径 R 添加到列表中。
  5. θn处轮廓的总高度hn是每个偶数-奇数对的差值之和。
  6. 找到所有高度的平均值hn

这不是最优雅的,并且(像任何近似方法一样)很容易出错。但这对于我的情况来说已经足够了。我很想知道任何更好的、分析得出的算法来完成同样的事情!

© www.soinside.com 2019 - 2024. All rights reserved.