如何计算中轴?

时间:2010-11-07 22:27:30

标签: geometry computational-geometry medial-axis

有谁知道如何计算两条给定曲线的中轴?

中轴:http://en.wikipedia.org/wiki/Medial_axis

这是我需要计算的形状: alt text

我自己画了一条暗轴,黑暗的黑线,但我需要能够动态计算它。

这是我到目前为止所做的applet和代码: http://www.prism.gatech.edu/~jstrauss6/3451/sample/

已知变量是: -pt A,B,C,D -radii红色,绿色和黑色圆圈 -pt Q和R(在图片外面),黑色圆圈。

3 个答案:

答案 0 :(得分:2)

C1C2成为半径为r1r2的圆心。由两个圆圈组成的图形的中轴(减去两个中心点)是满足

的点M的集合。
|M - C1| - r1 = |M - C2| - r2

暗示

|M - C1| - |M - C2| = r1 - r2
|M - C1|^2 + |M - C2|^2 - (r1 - r2)^2 = 2 * |M - C1||M - C2|
(|M - C1|^2 + |M - C2|^2 - (r1 - r2)^2)^2 = 4 * |M - C1|^2 |M - C2|^2  (**)

因此,中轴是四度代数曲线。

我们假设C1C2在y轴上,并假设点(0,0)位于中轴上(所以C1 = (0, -r1 - x)和{{1对于某些C2 = (0, r2 + x),您可以根据数据进行计算)。这是你可以随时转变的东西。

现在,您需要曲线x来对中轴进行参数化。为此,选择您选择的y = f(x),并使用牛顿方法在x中求解方程(**),并进行初始猜测y。这是一个你可以精确计算的多项式,以及它的导数(在y = 0中)。

答案 1 :(得分:1)

在这种情况下,中轴是hyberbola。

有关详细信息,请参阅this article,特别是以下摘录:

  

外部与两个给定圆相切的任何圆的中心位于双曲线上,双曲线的焦点是给定圆的中心,顶点距离2a等于两个圆的半径差。

因此,考虑到焦点和顶点距离,问题会缩小到绘制双曲线。

答案 2 :(得分:0)

如果您将圆圈嵌入矩形网格(想象图像),则可以使用此图像的距离变换来计算您的中轴。见link。 存在几种用于计算图像网格上的距离​​图的O(nlogn)算法。