私は小さな2Dゲームのために物理学をプログラミングしています。画面上のすべてのオブジェクトを画面上の他のすべてのオブジェクトと照合する必要があります。それはO(N^2)
なので、私はそれが本当に好きではありません。私が念頭に置いていた何配列内の要素のペアを一度だけ訪問するには?
:
for (var i = 0; i < objects.length; i ++)
for (var j = 0; j < objects.length; j ++)
if (collide(objects[i], objects[j])) doStuff(objects[i], objects[j]);
これは不要であり、私は1つに対して、別の複数回同じオブジェクトをチェックします。どうすればそれを避けることができますか?
visited[i][j] = 1;
visited[j][i] = 1;
そして、私はいつもだろう:私は、私はこれに私が希望するオブジェクトのペアを訪問するたびに(nはオブジェクトの数であると仮定)n*n
あろうマトリックスを有すると考えられ、そして私が訪れたオブジェクトのペアを知る。
しかし、私はこれらのセルをすべてn*n
回に設定する必要があります。開始時にすべて0
に設定してください。たぶん、私は[]
にすべてを設定することができますが、これはまだ私にとって実行可能なソリューションのようには思われません。何か良いことがありますか?
明らかに私の言語はJavascriptですが、私はC、C++、Pythonを比較的よく知っていますので、(JavaScript、C、C++にはほとんど同じ構文がありますが)それらに答えることができます。
パフォーマンスが問題になる場合は、おそらくクアッドツリーを使い始めることをお勧めします。 –
私は本当にそれが必要だとは思わない...画面には通常<10個のオブジェクトがある。 – corazza
その場合、はい、本当に問題の価値はありません。 –