これは一見難しい挑戦的なジオメトリパズルです。
円与えられA
、及びn
他の円B[n]
内に含まれる全面積見つけるA
ではない任意の円内をB
。
コードはできるだけ短くする必要があります。
入力
入力には次の情報が含まれている必要があります。
- circleの半径を表す浮動小数点数
A
。 - の円の半径を表す浮動小数点数のリスト
B
。 - の円の中心のリスト
B
。プログラムでは、極座標またはデカルト座標のいずれかの中心を想定している場合があります。 - オプションで、
n
Bの円の数を受け取ることができます。この入力は必須ではありません。
円の中心がA
原点、つまり点であると想定され(0, 0)
ます。
の2つの円B
が同一ではないことが保証されますが、すべてのB
交差する円A
、すべての中心B
が外側A
、または2つの円がB
互いに交差しないことは保証されません。ソリューションがさまざまなエッジケースを処理できることを確認します。
入力は任意の順序で、テキスト入力(stdinまたは同等の言語を介して)、関数パラメーター、またはコマンドライン引数の形式で受け取ることができます。
テキスト入力の受信を選択した場合、入力の間に1文字または2文字の印刷可能なASCII区切り文字が必要です。
出力
プログラムまたは関数A
は、の円のいずれにも属さない総面積を表す単一の浮動小数点数を出力する必要がありますB
。回答は、すべてのテストケースで少なくとも3つの有効数字に対して正確でなければなりません。
一般的なコードゴルフ規則が適用されます。
ソリューションは、円内のサンプリングポイントに依存して領域を決定しないでください。
円の交差点を自動的に見つける、円の交差点内の領域を見つける、またはこの問題をすぐに解決する組み込み機能は許可されていません。
テストケース
各画像で、円のA
輪郭は青で、円のB
輪郭は緑、黒で塗りつぶされています。返されるべき領域は赤で塗りつぶされています。
(私のソリューションをチェックしてくれたRainer Pに感謝します)
テストケース1:
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
テストケース2:
A = {x: 0, y: 0, rad: 100.000000}
B[0] = {x: 100.000000, y: 0.000000, rad: 50.000000}
B[1] = {x: 30.901699, y: -95.105652, rad: 50.000000}
B[2] = {x: -80.901699, y: -58.778525, rad: 50.000000}
B[3] = {x: -80.901699, y: 58.778525, rad: 50.000000}
B[4] = {x: 30.901699, y: 95.105652, rad: 50.000000}
Result: 1.3878e+04
テストケース3:
A = {x: 0, y: 0, rad: 138}
B[0] = {x: 100, y: 0, rad: 100}
B[1] = {x: -50, y: -86, rad: 100}
B[2] = {x: -93, y: 135, rad: 50}
Result: 1.8969e+04
テストケース4:
A = {x: 0, y: 0, rad: 121.593585}
B[0] = {x: 81.000000, y: 107.000000, rad: 59.841457}
B[1] = {x: -152.000000, y: -147.000000, rad: 50.000000}
B[2] = {x: 43.000000, y: -127.000000, rad: 105.118980}
B[3] = {x: 0.000000, y: -72.000000, rad: 57.870545}
B[4] = {x: -97.000000, y: -81.000000, rad: 98.488578}
B[5] = {x: -72.000000, y: 116.000000, rad: 66.468037}
B[6] = {x: 2.000000, y: 51.000000, rad: 50.000000}
Result: 1.1264e+04
テストケース5:
A = {x: 0, y: 0, rad: 121.605921}
B[0] = {x: 0.000000, y: -293.000000, rad: 250.000000}
B[1] = {x: 0.000000, y: -56.000000, rad: 78.230429}
B[2] = {x: 0.000000, y: -102.000000, rad: 100.000000}
Result: 2.6742e+04
推奨読書:
Fewell、MP「3つの円の共通の重なりの領域」。2006年10月。ウェブ。http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf。
B
別の円が含まれるテストケースはないようです。それを追加する価値があるかもしれません。
1.8970e+04
ます。
B[0] - A intersection: 20653.659515
、 B[1] - A intersection: 20757.824115
、 B[1] - B[0] intersection: 1841.847766
、B[2] - A intersection: 1289.164541
、得た18969.69009
答えとして。