2つの同心円の間にあるポリゴンの最小辺数を見つけるアルゴリズムを設計するにはどうすればよいですか?
これに似ています:
最初に最も単純なケースについて考えてください。内側の円は微視的に小さいです。内側の円の半径がゼロでない限り、辺の最小数は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))
(私はこの数学を再確認していません、そしてそれは本当に遅いです)。
多角形の外接円の半径である多角形の半径を。で表しR
ます。内接円の半径は
r = R*Cos[180°/n]
これを解きn
、否定的な結果をもたらす偽の解を排除すると、次のようになります。
n = 180°/ArcCos[r/R]
の整数値を取得するには、少しいじる必要がありn
ます。それはあなたに任せます。
このアルゴリズムにより、各ステップで最大の放射状セクションを確実にカバーできるため、結果のポリゴンの辺の数を最小限に抑えることができます。
辺の数だけを知りたい場合は、外側の円の同じ点から来る内側の円の2つの接線の間の角度を見つけて、360度全体を構成するそのような角度の数を計算するだけで十分です(残り)-コメントで提案された@cheekenのように