問題タブ [collision-detection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
318 参照

geocoding - ジオコード範囲の衝突を回避する

不均一な場所の大きなテーブルから場所エンティティ (「マディソン スクエア ガーデン」、「サン ディエゴ動物園」など) を抽出しています。新しいテーブルで複数のエンティティを回避しようとしています。信頼できる住所はありませんが、ローカル範囲内の住所を抽出しようとしています。

これは、30km の地理的範囲内で類似した名前を数えて照合することで行っています。

私は地理コード化された都市テーブルを調べており、都市ごとに緯度/経度の範囲を作成し、その範囲内の場所の名前を抽出しています。

例としてマディソン スクエア ガーデンを使用します。会場は、都市テーブル内の異なる都市から複数回重複します。たとえば、マンハッタン、ニューアークなどはすべて NYC の範囲と重複する可能性が高く、NYC の一部のプロパティでは複数のエントリが発生する可能性があります。

範囲を狭い範囲に設定することはできません。場所が見つからないか、さらに悪いことに、通り/都市/ジオコーディングされた適切な場所がないことが多いため、より多くのエントリが作成されることになります (ただし、30 km の範囲は機能するようです)。かなりよく)。

ジオハッシュにより、重複を見つけて複数のエントリを回避できる境界ボックスを作成できるようになることを望んでいましたが、私が見つけたものに基づいているとは思えません。

理想的には、セルに入れることができるハッシュまたはその他の値を探していると思います。一意の場所の名前/ハッシュを保存して、mysql が単一の場所に対して複数のエントリを作成しないようにします。

各エントリの適切な番地はありません (いくつかありますが)。そのため、番地レベルの精度を取得し、範囲を使用しないという選択肢は実際にはないようです。また、一貫した都市名がないため、最終的には NYC、ニューヨーク、マンハッタンなどになります。しかし、私の都市テーブルは、ニューヨークを含めて優れていますが、NYC は含まれていません。

_--------------EDITED-------------------- Geohash.org をもう一度見た後、私はオンになっていると思います少し粒度が欠けているだけです。ハッシュの最初の 2 文字を取得すると、大きすぎる範囲内で一貫性が保たれます。たとえば、ビクトリア、紀元前からポートランドまでのすべて、または最初の 2 文字がすべて「C2」です。ただし、3 文字のソリューションでは、NYC は 'dr5' で始まり、Newark もそうですが (これは良いことです)、Hackensack は 'dr7' です。さらに悪いことに、バノーバー、紀元前。は「C2b」ですが、リッチモンド bc の郊外は「C28」です。

0 投票する
1 に答える
1584 参照

silverlight-3.0 - Silverlight 3で2つの長方形が衝突するかどうかを確認するにはどうすればよいですか?

長方形を重ねることができないプログラムがあります。長方形が衝突するかどうかを確認するにはどうすればよいですか?これには何らかの機能がありますか、それとも自分で作成する必要がありますか?

0 投票する
1 に答える
101 参照

actionscript-3 - クラスのパブリック関数にアクセスしようとするとエラーが発生するのはなぜですか? (アクションスクリプト 3)

私は現在、自分のゲームのダメージ メカニックを構築しています。これは、'hurt' クラスと 'collision' クラスの 2 つのクラスで処理されます。衝突クラスは、それ自体のインスタンスを衝突クラスの「hurtCollision」メソッドに渡します。これにより、衝突クラスは、プレーヤーとその傷のインスタンス (表示オブジェクト) との間の衝突を検出できます。ただし、その関数にアクセスしようとすると、次のエラーが発生します。

以下に 2 つのクラスを示します。

コリジョン クラス (ctrl f で hardCollision を実行できます):

{

}

傷ついたクラス:

{ import flash.display.MovieClip; インポート flash.events.Event; 衝突をインポートします。

}

編集: 皆さんにお知らせしておくと、e.hurtPlayer は、プレーヤーの健康状態を制御する単なるドキュメント クラス メソッドです。

0 投票する
7 に答える
254 参照

oop - オブジェクト指向の設計とミラー化/複製された方法

オブジェクト指向の設計で問題が発生し、2 つの異なるクラスでコードが重複してしまいます。何が起こっているかは次のとおりです。

この例では、ゲーム オブジェクト間の衝突を検出したいと考えています。

共通メソッド (checkForCollisionWith など) を保持する基本 CollisionObject と、基本クラスを拡張する CollisionObjectBox、CollisionObjectCircle、CollisionObjectPolygon があります。

設計のこの部分は問題ないように見えますが、私を悩ませているのは次のとおりです。

Circle サブクラス内で円対ボックスの衝突チェックを実行します。逆に、

Box サブクラス内でボックスと円の衝突チェックを実行します。

ここでの問題は、Box クラスと Circle クラスの両方にあるため、Circle と Box の衝突コードが重複していることです。これを回避する方法はありますか、またはこの問題に間違った方法で取り組んでいますか? 今のところ、重複コードをすべて含むヘルパー クラスを用意し、重複を避けるために aCircle および aBox オブジェクトから呼び出します。ただし、これに対するよりエレガントな OO ソリューションがあるかどうかは興味があります。

0 投票する
2 に答える
2278 参照

xna - 円セグメントと線セグメント間の衝突処理

私は小さなゲームを実装していますが、物理演算を正しく機能させるのに問題があります。このゲームでは、1つのボール(フレームからフレームに移動し、半径が変わる可能性のある円)といくつかの壁(フレームからフレームに移動する線分)があります。衝突を正しく検出でき、ボールが正しい方向に跳ね返るのは問題ありません。

ボールが1つのフレームでラインと交差し、次のフレームで再び交差してダブルバウンスを引き起こす状況では、問題が発生します。有効な位置になるまでボールをラインの法線に沿って戻すことはできますが、問題のラインがその軸に沿って打たれると、これは本当に奇妙な動作を引き起こします(ピンポンボールが直立したつまようじに落ちると想像してください。つまようじの片側になるように突然脇に移動します...)。また、ボールが特定のフレームで複数の線と交差する場合にもいくつかの問題があります(4本の線が一緒になって長方形を作り、ボールがその長方形の角と交差することを想像してください)-どの方向に跳ね返る必要がありますか?どちらの方向にシフトする必要がありますか?

具体的な質問はありませんが、ヒントや役立つチュートリアルを探しています。私がこれまでに見つけたすべての2Dは、長方形の交差点のみをカバーしています。

違いがあればXNAを使用しています。

ありがとう、
キャメロン

0 投票する
4 に答える
232 参照

math - 単純な問題-速度と衝突

さて、私は宇宙シムに取り組んでいます。ほとんどの宇宙シムは、弾丸が到達したときに敵の船がどこにあるか(3D位置)を計算する必要があります。弾丸が移動する速度と敵が出荷する速度からこれを計算するにはどうすればよいですか?

0 投票する
5 に答える
10049 参照

c# - Triangle-Triangle Intersection Test

3D環境で三角形と三角形の交差テストを理解して実装するためのチュートリアルまたはガイドがあるかどうかを知りたいです。(交差点が発生した場所を正確に知る必要はありませんが、交差点が発生したことだけを知る必要があります)

私は理論的なpdfに従ってそれを実装するつもりでしたが、私はかなり立ち往生しています

  1. 三角形2の平面方程式を計算します。
  2. 三角形1のすべての点が同じ側にある場合は、取るに足らないものとして拒否します。
  3. 三角形1の平面方程式を計算します。
  4. 三角形2のすべての点が同じ側にある場合は、取るに足らないものとして拒否します。
  5. 交線を計算し、最大軸に投影します。
  6. 各三角形の間隔を計算します。
  7. 間隔を交差させます。

このガイドのポイント5。何を求めているのかよくわかりません(5、6、7すべて)。XD

私は数学の知識があまりないので(まあ、大学でのいくつかの試験で私に与えられたものは知っています(私は生のプログラマーXDです))、できるだけシンプルにしてください。:D(グーグルで検索しようとしましたが、ほとんどのリンクは、私が本当に知りたくない、理解できない数式でいっぱいの4〜5ページを指しています。)

助けてくれてありがとう

0 投票する
4 に答える
1741 参照

collision-detection - ビリヤード (プール) ゲームで軌道を事前に計算する方法は?

ビリヤードのほとんどの衝突検出アルゴリズムは単純なアプローチを使用しており、ボールの位置がインクリメントされてから衝突がチェックされます。衝突を「スキップ」する可能性があるため、速度が非常に高い場合、この方法はうまく機能しません。

ビリヤード ゲームでボールの軌道を事前に計算する方法を探しています。軌跡がわかったら、動きが止まるまでボールをアニメートします。衝突は数学的に検出され、解決されるため、速度について心配する必要はありません。

誰かがそれをしたかどうか知っていますか?車輪の再発明はしたくありません。ありがとうございました。

0 投票する
4 に答える
4480 参照

math - 加速球間の衝突検出

私は、3D宇宙飛行、惑星/恒星重力、船の推力、相対論的効果を組み込んだ物理エンジン/シミュレーターを書いています。これまでのところ、非常にうまくいっていますが、私が助けを必要としていることの1つは、衝突検出アルゴリズムの計算です。

私が使用している動きの反復シミュレーションは、基本的に次のとおりです。

(注:3Dベクトルはすべて大文字です。)

どこ:

基本的に私がする必要があるのは、上記の(EQ.2)から派生した2つのオブジェクト(obj1、obj2)の効率的な式を見つけて、それらが衝突するかどうか、衝突する場合はいつかを判断することです。正確な時刻が必要なのは、それがこの特定の時間増分にあるかどうかを判断できるようにするため(加速度は時間増分ごとに異なるため)と、正確な位置を特定できるようにするためです(これは、時間)

このエンジンでは、すべてのオブジェクトを球としてモデリングしています。この式/アルゴリズムで行う必要があるのは、どのポイントであるかを把握することだけです。

ここで、.Distanceは正のスカラー値です。(これが簡単な場合は、.Distance計算に暗黙的に含まれる平方根関数を回避するために、両側を2乗することもできます)。

(はい、私は他の多くの衝突検出の質問を知っていますが、それらの解決策はすべてそれらのエンジンと仮定に非常に特有であるようであり、シミュレーションの増分内で適用される3D、球、および加速度の条件に一致するものはないようです。私が間違っているかどうか教えてください。)


いくつかの説明:

1)時間増分の前後で2つの球の交差をチェックするだけでは不十分です。多くの場合、それらの速度と位置の変化はそれらの半径をはるかに超えます。

2)RE:効率性、衝突の可能性のある候補を決定することに関して(とにかくこの時点で)助けは必要ありません、私はそれをカバーしていると思います。


たくさん出てくるように思われる別の説明:

3)増分移動の私の方程式(EQ.2 )は、速度加速度の両方を適用する2次方程式です。

私が見た物理エンジン(そして確かに私が今まで聞いたすべてのゲームエンジン)では、速度のみを適用する増分運動の線形方程式のみ:

これが、StackOverflow、Wikipedia、およびWeb全体で見られる、2つの線分の交差/最も近いアプローチの検出など、一般的に公開されている衝突検出ソリューションを使用できない理由です。私のシミュレーションでは、結果の基本となる可変加速度を扱っているため、必要なのは2つの放物線セグメントの交差/最も近いアプローチです。