Algorithm 求多边形最小边数的算法

Algorithm 求多边形最小边数的算法,algorithm,Algorithm,如何设计一个算法来寻找位于两个同心圆之间的多边形的最小边数 与此类似: 画一条与内圈相切的线,标记a,B-切线与外圈的交点 从点B到内圈绘制切线(不同),标记与外圈C的交点 重复步骤(2),直到新切线与第一条切线AB相交 此算法将确保在每一步覆盖最大径向截面,从而最小化生成多边形中的边数 如果您只想找到边的数量,那么只需找到从外圈上同一点到内圈的两条切线之间的一个角度,并计算有多少个这样的角度构成整个360度(如果有余数,则添加1),就像@cheeken在评论中建议的那样 画一条与内圈相切的线

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

与此类似:

  • 画一条与内圈相切的线,标记a,B-切线与外圈的交点
  • 从点B到内圈绘制切线(不同),标记与外圈C的交点
  • 重复步骤(2),直到新切线与第一条切线AB相交
  • 此算法将确保在每一步覆盖最大径向截面,从而最小化生成多边形中的边数

    如果您只想找到边的数量,那么只需找到从外圈上同一点到内圈的两条切线之间的一个角度,并计算有多少个这样的角度构成整个360度(如果有余数,则添加1),就像@cheeken在评论中建议的那样

  • 画一条与内圈相切的线,标记a,B-切线与外圈的交点
  • 从点B到内圈绘制切线(不同),标记与外圈C的交点
  • 重复步骤(2),直到新切线与第一条切线AB相交
  • 此算法将确保在每一步覆盖最大径向截面,从而最小化生成多边形中的边数


    如果您只想找到边的数量,那么只需在从外圈上的同一点到内圈的两条切线之间找到一个角度,并计算构成整个360度的角度(如果有余数,则添加1个)-就像@cheeken在评论中建议的那样,首先考虑最简单的情况:内圈在显微镜下很小。只要内圈的半径不为零,则最小边数为3

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

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

    distance_to_midpoint = cos ( 360 / (N * 2) ) * radius_of_outer_circle
    
    (说明:如果您使用圆的中心点与所讨论的边形成等腰三角形,则半径的角度为360/N。在边的中点将三角形一分为二,形成斜边等于外圆半径的直角三角形,然后使用余弦规则)

    现在,
    u到_中点的距离
    需要大于或等于内圈的半径,因此求解
    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))
    

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

    首先考虑一个最简单的例子:内圈在显微镜下很小。只要内圈的半径不为零,则最小边数为3

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

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

    distance_to_midpoint = cos ( 360 / (N * 2) ) * radius_of_outer_circle
    
    (说明:如果您使用圆的中心点与所讨论的边形成等腰三角形,则半径的角度为360/N。在边的中点将三角形一分为二,形成斜边等于外圆半径的直角三角形,然后使用余弦规则)

    现在,
    u到_中点的距离
    需要大于或等于内圈的半径,因此求解
    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))
    

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

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

    r = R*Cos[180°/n]
    
    n
    解决此问题,消除产生负面结果的虚假解决方案,您就得到了

    n = 180°/ArcCos[r/R]
    

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

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

    r = R*Cos[180°/n]
    
    n
    解决此问题,消除产生负面结果的虚假解决方案,您就得到了

    n = 180°/ArcCos[r/R]
    

    你需要花点时间才能得到
    n
    的整数值,我将把这个留给你。

    你能发布一个屏幕截图的链接来证明你的观点吗?此外,最好详细说明你已经做过的一些想法/努力,比如说-屏幕截图中的圆圈是什么,同心??取与内圈相切的任何直线。计算切线与外圆相交的点。这两个点和圆心描述了一条弧。计算天花板(2pi/弧度);这是所需的边数。你能发布一个屏幕截图的链接来证明你的观点吗?此外,最好详细说明你已经做过的一些想法/努力,比如说-屏幕截图中的圆是如何同心的?取任何与内圈相切的线。计算切线与外圆相交的点。这两个点和圆心描述了一条弧。计算天花板(2pi/弧度);这是要求的边数。我也没有检查数学,我让Mathematica做,它同意你。我也没有检查数学,我让Mathematica做,它同意你。