2

私は 100,000 回の反復で for ループを使用しています。各反復には、いくつかのオブジェクトの位置の単純な距離計算が含まれます。これはすべて、洗練された衝突検出メカニズムの一部です。

不要な反復が多すぎると効率が悪く、プログラムの速度が低下します。ソートされたベクトルを使用して計算時間を短縮したいと考えています。

したがって、代わりに、「グリッド」に従って位置をソートする2Dベクトルに参照要素を挿入することにより、反復を最小限に減らすことを考えました。100,000回の反復の代わりに、同じ計算でおそらく1000回の反復しかありませんが、現在は特定の「セクター」のみが関係しています。ただし、オブジェクトの位置が変わるたびに、push_back と erase を使用して、オブジェクトのグリッドまたはセクターの位置で 2D ベクトルを定期的に更新する必要があるという欠点があります。

私の質問は、コードではなくパフォーマンスに関するものです。erase と push_back を使用してベクトルを更新すると、力ずくの反復試行を使用するよりも速くなりますか? このアイデアを追求する価値があるかどうか、大まかな見積もりが必要です. ありがとう。

4

2 に答える 2

1

あなたが探しているのはbinary space partitioningです。このように、特定のオブジェクトについて、1 つの衝突オブジェクトを見つけることは O(log N ) です。ここで、Nはオブジェクトの数です。これにより、衝突検出のコストが O(N 2 ) から O( N log N ) に削減されます。

于 2013-10-05T00:06:51.520 に答える
0

ほとんど静的なオブジェクト間の距離計算を行っている場合は、四分木を使用してチェックの数を減らすことができます。多くのオブジェクトが移動している場合は、「緩い四分木」がより適切なオプションです。

于 2013-10-05T01:24:35.040 に答える