0

全体的な目標: 3 次元空間内のポイントのリストが与えられた場合、ポイントの半径を指定してそのポイントの周りに球を生成し、特定のポイントを指定して 2 つ以上の球の間にスペースがあるかどうかをプログラムで確認する必要があります。

問題: 点のグリッド (球の中心を表す) と周囲の球を表すデータ構造を考えるのに苦労しています。これらは常に穴の番号であるとは限りません。

データの例:
点 A: (-3, .25, 4) 半径: 1.35
点 B: (5, 6.35, 1) 半径: 2
点 C: (1, 0, -1) 半径: .5

私の当初のアイデアは、軸の最大値と最小値の絶対値を合計して、必要な最小精度で割ったサイズの整数の 3 次元配列を作成することでした。次に、変換係数を使用して、配列の位置 (整数全体) から、探しているポイントの小数点以下の位置に変換します。次に、球の中心の周りに球が存在することを表すデータを配列に入力します。

私が探しているのは、この非整数の 3D グリッドを表すために使用するデータ構造です。自分の技術が間違っているように感じます。

これは Java です。

ありとあらゆる助けが大歓迎です、ありがとう!

4

2 に答える 2

0

リストしたように、3つの座標x、y、z(3dポイント)と半径でそれらを表現し、(3次元)距離を使用してポイントが球内にあるかどうかを評価しないのはなぜですか?または、ここでユースケースを見逃していますか? これは次のように聞こえます。

于 2012-04-26T20:18:15.963 に答える
0

私は実際に今週初めに非常に似たようなことをしました。私がしたことは、2 つのポイントが持つことができる最小距離を決定することです (ここで、2 つの球体の半径を追加することによって見つけたのは、私があなたを正しく理解していた場合です)。これを使用して、(0, 0, 0) の開始球を使用して球のランダム フィールドを作成し、そこからランダムな距離だけ離れた球を段階的に追加しました。私の場合(これも必要かどうかわからない)、最大距離もあったので、すでに受け入れられている球の1つの座標をシフトし、距離が一致するかどうかを確認しました。

要約すると、次のようになります。

  1. 出発点を持つ
  2. 既存のポイントの 1 つに (特定の範囲内で) ポイントをランダムに配置します
  3. 間隔の制限を満たしているかどうかを確認します
  4. 十分な数の球体が得られるまで、2 ~ 3 を繰り返します。

それが誰かの助けになることを願っています。

于 2013-12-10T14:07:43.510 に答える