2011-02-23 14 views
0

2球の間の交差点の距離を調べる方法はありますか?私は2つの球が交差するときに交差点の円が形成されることを理解する。しかし、私が何を描こうとしているのかは、サークル1を外側に押して、交差しないようにどれくらいの距離を置いて、お互いに触れているかということです。私が持っている唯一のデータは、球の中心とそれぞれの半径です。球 - 球の交点:距離ベクトル

おかげ

+1

を試してみてください。http://math.stackexchange.com –

答えて

0

あなたは2つの球が重なることがわかっている場合は、それらの中心間の距離を計算することができます。次に、2つの球の半径を足し合わせることで、球がある点でのみ接触するように球が互いに接していなければならない最小の距離を得ることができます。 2つの差(半径の合計から中心間の距離を差し引いたもの)は、球がある点でのみ接触するように球を互いに離して移動する必要がある量でなければなりません。

+0

@ templatetypedef-答えが同じであることは単なる偶然のことです:) – Mahesh

+0

@ Mahesh-数学的には素晴らしいですか?一度も会ったことのない2人の人は、同じ問題に取り組むことができ、お互いに数秒で同じ答えを得ることができます。 :-) – templatetypedef

+0

はい、数学は素晴らしいです。しかし、あなたの答えは常に非常に良く説明的です。私はあなたの答えをC + +の質問に見て、それから新しいことを学びます。私は初心者です。あなたの答えがあなたのものと同じようになることを願っています:) – Mahesh

1

(radius1 + radius2) - (Current distance between the two centers)は、いずれかの球が互いに正確に接触するために移動する距離の量です。

+0

3次元空間を仮定すると、(radius1 + radius2) - (2つの中心間の現在の距離)は、オブジェクトがxyとzのすべてで移動しなければならない距離ですか? ? – Krishnan

+0

@ Krishnan-いいえ、それは距離の大きさです。球体を動かす必要があるベクトルを取得したい場合は、球体を移動させてある点でしか動かすことができない無数の方法があるので、より多くの情報を与える必要があります。おそらく、中心間の線上に単位ベクトルを取得し、そのベクトルを上の距離だけスケーリングしたいとします。 – templatetypedef

+0

良い質問。交わる球の中心が** X軸**上にあると仮定します。今度は、いずれかの球の中心の動きが正確に他のものに触れるようになるのは、** X軸**だけであり、すべての3軸に沿った動きではありません。 – Mahesh

2

を(仮定球は現在、交差している)、すなわち私 + YJ + Xを=(位置ベクトルBに中心を有する2つの球を定義しますzk)。

球Bの中心に球Aの中心からベクトルをCを定義:

C = Bからその長さがある

| c | = | b - a |
              = SQRT([B Xから X] + [ B Yから Y] + [ Z B - z]

マヘシュが述べたように、 2つの球の間の距離は、

| d | = | c | - R - R B

だからBの最も遠い点までの球Aの最も遠い点からのベクトルDは、(球がまだ交差していない)Cに沿ってポインティングされるいずれかまたは反対方向(球が交差している場合)に表示されます。

1つの球が交差しないように移動するには、dで移動する必要があります。 (| D |/| C|)
D

F =:これはCに沿っているので、私たちはDのコンポーネントを取得する要因によってCを掛けることができます = x方向に、例えば* C

をF:

D X = Fの*のC X

だから私はこれを試して言う:

  • 計算AとB
  • の位置ベクトルから変位Cの部品は長さを計算しますcその成分から
  • 長さcと半径からdの長さを計算する
  • 計算係数fによってCの成分をスケーリングすることにより、D
  • 計算Dの成分 C F因子。

球が交差しているかどうかは、fの記号をテストすることでテストできます。負であれば、球が交差します。 dでAまたはBを移動するか、または両方とも交差しないようにdの一部で移動します。