如何设计算法以找到位于两个同心圆之间的多边形的最小边数?
与此类似:
答案 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)
此算法将确保您覆盖每一步的最大径向截面,从而最大限度地减少生成的多边形中的边数。
如果你只想找到边数,那么就足以找到来自外圆上同一点的内圆的2个切线之间的角度,并计算出这个角度包含整个360度的角度(如果还有一个余数) - 就像评论中提到的@cheeken一样