たとえば、制限されたスペースが 100 x 100 x 100 の大きさで、各ボールの半径が 5 の場合、このスペース内のランダムな位置にこれらのボールを 100 個生成する必要があり、重複は許可されません。私は2つのアプローチを考え出します:
srand を使用して 100 個の位置を取得し、重なっているボールを削除するチェック (2 つのボールの中心の距離が半径の 2 倍未満であるかどうかのチェック) を実行し、別の x 個のボール (x はボールの数) を生成します。 100 個のボールが重ならなくなるまでこのプロセスを繰り返します。
最初にスペースを 100 個の立方体に分割し、 を使用して割り当てられた立方体内に各ボールを配置
srand
します。このようにして、ボールがまったく重ならないようにします。
ランダムに関しては最初の方法の方が適切だと思いますが、時間がかかりすぎて、2番目の方法は高速で簡単ですが、ランダムのアイデアについてはわかりません。このモデルは、空気中の分子の位置をシミュレートしようとしています。どちらも良い方法ではないかもしれませんが、良い方法があれば教えてください。前もって感謝します!
編集: @Will は、元の最初のアプローチよりも似ていますが、はるかにクリーンなオプションを提供してくれます。新しいボールを追加するたびに、既存のボールと重複しているかどうかを確認し、重複している場合は再生成します。複雑さは 1+2+3...+(n-1) で、約 O(n^n) です。しかし、より高速なアルゴリズムがあるかどうかはまだ疑問です。
Edit2: 申し訳ありませんが 1+2+..n は n^2 である必要があります