ここでは、ディクリートセルのフィールド(2次元配列またはテーブル)があるとします。私たちは自己交差がなく、斜めに接続されていない有限のパスを内部に持っています。パーティクルはA点で始まり、B点までパターンをたどります。1つのステップは、有限時間= tで実行できます。したがって、パス全体の時間はT = t * lとなります。ここでl =パス内のセルの数です。しかし!フィールドには、「h」と「v」とマークされたセルがいくつかあります。パーティクルが 'h'セルに当たった場合、パーティクルは3つのパーティクルに分割されます。 1つはパスで移動し続けます。 2番目のフィールドは、「h」セルからフィールドの左端に向かって左に移動し始めます。 3番目のフィールドは、 'h'セルからフィールドの右端に移動します。同様に 'v'セルと同様に、左/右の代わりに、別の2つのパーティクルが上下に動き始めます。すべてのパーティクルが同じ速度で同時に移動しています。追加のパーティクルも 'h'と 'v'を集めることができ、分割してより多くのパーティクルを生成することもできます。最初のパーティクルが始まる瞬間からすべてのパーティクルが完了した瞬間までの時間を計算する関数をLuaに書く必要があります。関連するイラストを参照してください。 「h」または「v」セルが収集されると、それは単純なセルになり、他のパーティクルはそれを打つと分裂しないことに注意してください。 個別の細胞経路を通過する時間を計算するにはどうすればよいですか?
答えて
シミュレーションの直接実行とは別にここで実行できるアルゴリズムはあまりありません。 異なる粒子の動きが他の粒子移動の条件を変えるので(収穫時のように)、シミュレーション時間の前知識はありません。 v
とh
タイルが対話プロセスの後に残っ
なら、あなたはただつまり、単純なレイトレーシングを行うルートをスキャンし、v
とh
タイルがv
とh
タイルから引き出された走査線を見つけ、v
、h
やボーダータイルを見つけることができます最長のパスを計算し、newfoundから線を引くv
、h
そしてそれらをスキャンし、すべての線が境界線に当たったり、ループにロックされるまで続きます。ループされた結果を無視するために、現在検査されているレイとその先行オブジェクトによって既にどのタイルが訪問されたかを記憶することができます。明らかに、特別なタイル(v
,h
)は、シミュレーション時間を延ばすことができるだけであり、上記の結果は、消える特別なタイルを有するシミュレーションの時間の上限を与えることは明らかである。正確なランタイムを計算するには、特定のタイルがトリガーされる瞬間を考慮する必要があります。確かに、それを光線で行うことは可能ですが、粒子の直接シミュレーションと同等であるという考えが少し必要です。
はそのためのコードは非常に簡単ですし、私は簡単にアルゴリズムを概説します:
%make array for particlesenter code here
particles={}
%define initial particle route
route={{x1,y1},{x2,y2},...}
%probably you should have your field defined somewhere here too
v_tiles={{x1,y1},{x2,y2}...}
h_tiles=...
%make particle, possible implementations are numerous really
%for example it could be represented by its position
%and a function which gives next position, based on current one
%for main particle it could search the route table for a current position and return next element,
%or just use external counter variable to keep track of propagation
particle={position={x,y}, propagator=function({x,y}) ....}
%put that into particles array obviously
%initialize counter
T=0
%run a cycle until there are particles
while #particles>0 do
%perform a single step for all the particles
for _,p in pairs(particles) do
%move them all
p.position=p.propagator(p.position)
endfor
%then check them all
for i,p in pairs(particles) do
%check for special tiles
if is_v(p.position) then
%make new particle
table.insert(particles,{
position={p.position.x, p.position.y+1},
%for secondary particles propagator would be just a constant addition to a single coordinate
propagator=function(pos) return {pos.x,pos.y+1} end
})
%make second new particle
%same for h tiles
if is_h(p.position) then ...
%check for border tile
if is_border(p.position) then
%remove those that are at the border
table.remove...
%for the original particle you'd have to check
%whether it has reached destination
%probably you should check that somewhere around here too
endfo
%do what we're here for: increase counter
T=T+1
endwhile
%when this reaches the end T will be the answer
あなたがLUAで問題を解決しているとき、あなたはメモリを心配しないように十分に強力なマシンを持っていることは良いですそして可変サイズの配列でただ消してください。しかし、現行のタスクでは、メモリの上限を1 + 2 *(num_v + num_h)とすることは可能です。 直接シミュレーションではパーティクルは少なくなるかもしれませんが、特殊なタイルとのやりとりごとに特殊なタイルが削除され、1つのパーティクルが追加されるため、それ以上はありません。
- 1. 経過時間を計算するjavascript
- 2. 日時フィールド間の経過時間を比較するにはどうすればよいですか?
- 3. セル間の経過時間を計算する
- 4. プレイヤーがアプリから過ごした時間をどのように計算すればよいですか?
- 5. 関数の経過時間を計算する方法は?
- 6. asp.netでタスクの経過時間を計算する
- 7. 時間の経過後に消えるdivを作成するにはどうすればよいですか?
- 8. androidで経過時間と日付を計算する方法
- 9. 完了率、経過時間、および予測経過時間を表示するにはどうすればよいですか?
- 10. pandas.datetime64の列から経過時間の列を作成するにはどうすればよいですか?
- 11. Javaのサードパーティ製API「LibGDX」で経過時間を記録するにはどうすればよいですか?
- 12. 時間の経過後にストリーミングツイートを停止するにはどうすればよいですか?
- 13. Tableauの次元の別個のカウントを計算するにはどうすればよいですか?
- 14. python:時間経過の計算
- 15. スイフト - 経過時間の計算に時間がかかりますか?
- 16. laravelで経路名で経路URLパターンを取得するにはどうすればよいですか?
- 17. Python - X日付からの経過時間を計算するには?
- 18. Excel - 別のワークシートで定義された細胞の平均を計算する
- 19. 角2経路をモックするにはどうすればよいですか?
- 20. 経過時間を計算するとThree.jsがレンダリングされない
- 21. VBAの経過時間を秒単位で計算する方法は?
- 22. モバイルでページの読み込み時間を計算するにはどうすればよいですか?
- 23. JMeterの2つのHTTPサンプラー間の経過時間を計算する方法
- 24. Neo4jのノード間で複数の経路をモデル化するにはどうすればよいですか?
- 25. 以下の関数の時間複雑度を計算するにはどうすればよいですか?
- 26. ゲームに経過時間の時計を追加する(Java)
- 27. Google Fitからアクティブ時間を計算するにはどうすればよいですか?
- 28. d3.transitionコールバックで長い計算時間に対応するにはどうすればよいですか?
- 29. 1時間あたりの平均を計算するにはどうすればよいですか?
- 30. カスタム時間列のローリングサムを計算するにはどうすればよいですか?
擬似コードの解決方法もあります。 – Aleksei