3

何千ものエージェント (マルチピクセル スプライト) がさまざまな方向に移動するシミュレーションがあります。シミュレーション空間には、座標で指定された架空の (空間に描かれていない) 検出ラインがあります。

各ラインを通過するエージェントを検出してカウントする効率的な方法は何ですか? (最初にエージェントがラインを通過したときのみカウントされます)。

2 つの簡単な方法が頭に浮かびます。

1- 各シミュレーション ステップで (すべてのエージェントが 1 ピクセル移動した後)、架空の線を描画し、線が切断されたエージェントを確認し、線のカウンターを増やし、エージェントが特定の線を通過したことをマークします。

2-「エージェントの移動」ごとに、それが線上にあるかどうかを確認し(どのように毎回線を引くのですか?)、渡された線を再度保存し、線のカウンターを増やします。

ここに画像の説明を入力

4

2 に答える 2

1

多くのオブジェクトと数行の良いアプローチは次のようになると思います:

まず、オブジェクトが移動した後、その中心に対する直線の方程式を計算します。距離が離れている場合 (有効距離は半径よりも大きい)、オブジェクトが以前に直線に近かったかどうかを確認します (添付のリストを介して)。その場合は、そのリストから参照を削除してください。十分に近い場合は、そのオブジェクトの形状と線に対して徹底的なテストを実行し、それらが交差する場合は、オブジェクトを「交差したばかり」として記録し、線の近くのオブジェクトのリストにその参照を追加します。

オブジェクトが数学的な点であり、線が無限である場合、オブジェクトに一連のブール値を与えます。それぞれが線に対応し、真の値は方程式の正の結果を示し、偽は負の結果を示し、それぞれの動きをチェックします。サインが反転した場合。各フリップは、ラインの交差を示します。

この方法により、交差を正しく検出し、オブジェクトの形状が複雑な場合に不要な計算を除外し (円の場合、線までの距離が半径よりも小さい場合、それらは交差します)、2 回以上の繰り返しで続く交差を追跡できます。動き。

于 2013-05-14T05:50:11.890 に答える