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

标签 algorithm

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

类似于此:

circles

最佳答案

首先考虑最简单的情况:内圆在显微镜下很小。只要内圆的半径不为零,边数最少为 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))

(我还没有仔细检查这个数学,而且真的很晚了)。

关于查找多边形最小边数的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338993/

相关文章:

javascript - 计算数组Javascript中的重复值

python - 在我的算法中修复硬币找零挑战的内存

c++ - 使用指向数组的指针进行合并排序

查找 NAPTR DNS 查询负载分配的算法

c++ - Trie 是 K 叉树吗?

algorithm - Ford Fulkerson 算法增加流量

algorithm - 找到所有最小生成树

algorithm - 寻峰算法 - 动态阈值或替代方法

MySQL - 选择标题如 %x% - 通配符如

java - "R. Sedgewick Algorithms in Java: Parts 1-4"中的分而治之法