找到多边形最小边数的算法

时间:2012-11-12 05:55:05

标签: algorithm

如何设计算法以找到位于两个同心圆之间的多边形的最小边数?

与此类似:

circles

3 个答案:

答案 0 :(得分:3)

首先考虑最简单的情况:内圈在微观上很小。只要内圆具有非零半径,最小边数为3。

多边形何时开始需要4个边?画一个刻在圆圈内的等边三角形。当内圆的半径到达三角形边的中心点时,多边形开始需要4个边。

如果您将N边的正多边形刻入外圆,您可以使用余弦规则计算从每边的中点到圆的中心的距离:

distance_to_midpoint = cos ( 360 / (N * 2) ) * radius_of_outer_circle

(说明:如果使用圆的中心点到相关侧面制作等腰三角形,则半径的角度为360 / N.将三角形在边的中点分成两半,形成直角斜边的三角形等于外圆的半径,然后使用余弦规则)

现在distance_to_midpoint需要大于或等于内圈的半径,因此求解N

radius_of_inner_circle = cos(360 / (N * 2)) * radius_of_outer_circle
cos(360 / (N*2)) = radius_of_inner_circle / radius_of_outer_circle
360 / (N*2) = acos(radius_i / radius_o)
N = 180 / (acos(radius_i / radius_o))

(我没有仔细检查过这个数学,现在已经很晚了。)

答案 1 :(得分:1)

R表示多边形的半径,即多边形外接圆的半径。内切圆的半径是

r = R*Cos[180°/n]

n解决此问题,消除产生否定结果的虚假解决方案,并且

n = 180°/ArcCos[r/R]

你必须摆弄一下才能获得n的整数值,我会把它留给你。

答案 2 :(得分:0)

  1. 绘制内圆的切线,标记A,B - 切线与外圆的交点。
  2. 从B点向内圆绘制一条切线(不同),用外圆C标记交点。
  3. 重复步骤(2),直到新切线穿过第一个切线AB。
  4. 此算法将确保您覆盖每一步的最大径向截面,从而最大限度地减少生成的多边形中的边数。

    如果你只想找到边数,那么就足以找到来自外圆上同一点的内圆的2个切线之间的角度,并计算出这个角度包含整个360度的角度(如果还有一个余数) - 就像评论中提到的@cheeken一样