質問編集履歴

2

追記

2018/11/03 03:05

投稿

Fallout_18
Fallout_18

スコア124

test CHANGED
File without changes
test CHANGED
@@ -166,121 +166,7 @@
166
166
 
167
167
  問題が出る場合の結果は以下になります。粒子がいる場所を1にした場合、途中で消える現象がおきてしまいます。
168
168
 
169
- ```
169
+
170
-
171
- 0 [[[1. 0. 0.]
172
-
173
- [0. 0. 0.]
174
-
175
- [0. 0. 0.]]
176
-
177
-
178
-
179
- [[0. 0. 0.]
180
-
181
- [0. 0. 0.]
182
-
183
- [0. 0. 0.]]
184
-
185
-
186
-
187
- [[0. 0. 0.]
188
-
189
- [0. 0. 0.]
190
-
191
- [0. 0. 0.]]]
192
-
193
- 1 [[[0. 0. 1.]
194
-
195
- [0. 0. 0.]
196
-
197
- [0. 0. 0.]]
198
-
199
-
200
-
201
- [[0. 0. 0.]
202
-
203
- [0. 0. 0.]
204
-
205
- [0. 0. 0.]]
206
-
207
-
208
-
209
- [[0. 0. 0.]
210
-
211
- [0. 0. 0.]
212
-
213
- [0. 0. 0.]]]
214
-
215
- 2 [[[0. 0. 0.]
216
-
217
- [0. 0. 1.]
218
-
219
- [0. 0. 0.]]
220
-
221
-
222
-
223
- [[0. 0. 0.]
224
-
225
- [0. 0. 0.]
226
-
227
- [0. 0. 0.]]
228
-
229
-
230
-
231
- [[0. 0. 0.]
232
-
233
- [0. 0. 0.]
234
-
235
- [0. 0. 0.]]]
236
-
237
- →ここです
238
-
239
- 3 [[[0. 0. 0.]
240
-
241
- [0. 0. 0.]
242
-
243
- [0. 0. 0.]]
244
-
245
-
246
-
247
- [[0. 0. 0.]
248
-
249
- [0. 0. 0.]
250
-
251
- [0. 0. 0.]]
252
-
253
-
254
-
255
- [[0. 0. 0.]
256
-
257
- [0. 0. 0.]
258
-
259
- [0. 0. 0.]]]
260
-
261
- 4 [[[0. 0. 0.]
262
-
263
- [0. 0. 0.]
264
-
265
- [0. 0. 0.]]
266
-
267
-
268
-
269
- [[0. 0. 0.]
270
-
271
- [0. 0. 0.]
272
-
273
- [0. 0. 0.]]
274
-
275
-
276
-
277
- [[0. 0. 0.]
278
-
279
- [0. 0. 0.]
280
-
281
- [0. 0. 0.]]]
282
-
283
- ```
284
170
 
285
171
  んーなぜなのでしょう、通れない場合は、t+1秒後の粒子の位置はt秒後の位置からうごかないとしています。
286
172
 
@@ -289,3 +175,287 @@
289
175
  (追記)
290
176
 
291
177
  どうやら、たとえばnumber=1で、x+1に移動するときに0であった場合、動かないという指示を加えているのにも関わらず、x+1の0を採用してしまっているみたいです。
178
+
179
+ (追記2)
180
+
181
+ ちょっと書き直してみましたが、まだ少しおかしいです。
182
+
183
+ ```
184
+
185
+ import numpy as np
186
+
187
+ import random
188
+
189
+ import itertools
190
+
191
+ stage = np.array([[[1,1,1],
192
+
193
+ [1,0,1],
194
+
195
+ [1,1,1]],
196
+
197
+ [[1,0,1],
198
+
199
+ [0,0,0],
200
+
201
+ [1,0,1]],
202
+
203
+ [[1,1,1],
204
+
205
+ [1,0,1],
206
+
207
+ [1,1,1]]],dtype=np.uint8)
208
+
209
+ n = 3
210
+
211
+ itr = 5
212
+
213
+ step = [i for i in range(0,itr)]
214
+
215
+ r_list = [i for i in range(0,n)]
216
+
217
+ walk = np.zeros([n,n,n],dtype=np.uint8)
218
+
219
+ walk[0,0,0] = 1
220
+
221
+ #for k in range(0,1):
222
+
223
+ for t in step:
224
+
225
+ if t == 0:
226
+
227
+ pass
228
+
229
+ else:
230
+
231
+ number = random.randint(1,6)
232
+
233
+ next_walk = np.zeros([n,n,n],dtype=np.uint8)
234
+
235
+ print(t,number)
236
+
237
+ for i in itertools.product(r_list,r_list,r_list):
238
+
239
+ x = i[0]
240
+
241
+ y = i[1]
242
+
243
+ z = i[2]
244
+
245
+ #Boundary condition
246
+
247
+ x1 = (x-1 + n) % n
248
+
249
+ x2 = (x+1) % n
250
+
251
+ y1 = (y-1 + n) % n
252
+
253
+ y2 = (y+1) % n
254
+
255
+ z1 = (z-1 + n) % n
256
+
257
+ z2 = (z+1) % n
258
+
259
+ if stage[i]== 0:#stage[x,y,z]=0のときは処理はしない
260
+
261
+ continue
262
+
263
+
264
+
265
+ elif number == 1 and stage[x1,y,z]==1 and stage[x,y,z]==1:
266
+
267
+ next_walk[x,y,z]= np.copy(walk[x1,y,z])
268
+
269
+ elif number==1 and stage[x1,y,z]==0 and stage[x,y,z]==1:
270
+
271
+ next_walk[i]= walk[i]
272
+
273
+
274
+
275
+ elif number == 2 and stage[x,y1,z]==1 and stage[x,y,z]==1:
276
+
277
+ next_walk[x,y,z]= np.copy(walk[x,y1,z])
278
+
279
+ elif number==2 and stage[x,y1,z]==0 and stage[x,y,z]==1:
280
+
281
+ next_walk[i]=walk[i]
282
+
283
+
284
+
285
+ elif number == 3 and stage[x,y,z1]==1 and stage[x,y,z]==1:
286
+
287
+ next_walk[x,y,z]= np.copy(walk[x,y,z1])
288
+
289
+ elif number==3 and stage[x,y,z1]==0 and stage[x,y,z]==1:
290
+
291
+ next_walk[i]=walk[i]
292
+
293
+
294
+
295
+ elif number == 4 and stage[x2,y,z]==1 and stage[x,y,z]==1:
296
+
297
+ next_walk[x,y,z]= np.copy(walk[x2,y,z])
298
+
299
+ elif number == 4 and stage[x2,y,z]==0 and stage[x,y,z]==1:
300
+
301
+ next_walk[i]=walk[i]
302
+
303
+
304
+
305
+ elif number == 5 and stage[x,y2,z]==1 and stage[x,y,z]==1:
306
+
307
+ next_walk[x,y,z]= np.copy(walk[x,y2,z])
308
+
309
+ elif number==5 and stage[x,y2,z]==0 and stage[x,y,z]==1:
310
+
311
+ next_walk[i]=walk[i]
312
+
313
+
314
+
315
+ elif number == 6 and stage[x,y,z2]==1 and stage[x,y,z]==1:
316
+
317
+ next_walk[x,y,z]=np.copy(walk[x,y,z2])
318
+
319
+ elif number ==6 and stage[x,y,z2]==0 and stage[x,y,z]==1:
320
+
321
+ next_walk[i]=walk[i]
322
+
323
+
324
+
325
+ else: 上記の条件以外は処理しない
326
+
327
+ continue
328
+
329
+
330
+
331
+
332
+
333
+ walk = np.copy(next_walk)
334
+
335
+ print(t,walk)
336
+
337
+ ```
338
+
339
+ 結果
340
+
341
+ ```
342
+
343
+ 0 [[[1 0 0]
344
+
345
+ [0 0 0]
346
+
347
+ [0 0 0]]
348
+
349
+
350
+
351
+ [[0 0 0]
352
+
353
+ [0 0 0]
354
+
355
+ [0 0 0]]
356
+
357
+
358
+
359
+ [[0 0 0]
360
+
361
+ [0 0 0]
362
+
363
+ [0 0 0]]]
364
+
365
+ 1 6
366
+
367
+ 1 [[[0 0 1]
368
+
369
+ [0 0 0]
370
+
371
+ [0 0 0]]
372
+
373
+
374
+
375
+ [[0 0 0]
376
+
377
+ [0 0 0]
378
+
379
+ [0 0 0]]
380
+
381
+
382
+
383
+ [[0 0 0]
384
+
385
+ [0 0 0]
386
+
387
+ [0 0 0]]]
388
+
389
+ 2 5
390
+
391
+ 2 [[[0 0 0]
392
+
393
+ [0 0 0]
394
+
395
+ [0 0 1]]
396
+
397
+
398
+
399
+ [[0 0 0]
400
+
401
+ [0 0 0]
402
+
403
+ [0 0 0]]
404
+
405
+
406
+
407
+ [[0 0 0]
408
+
409
+ [0 0 0]
410
+
411
+ [0 0 0]]]
412
+
413
+ 3 1
414
+
415
+ 3 [[[0 0 0]
416
+
417
+ [0 0 0]
418
+
419
+ [0 0 0]]
420
+
421
+
422
+
423
+ [[0 0 0]
424
+
425
+ [0 0 0]
426
+
427
+ [0 0 1]]
428
+
429
+
430
+
431
+ [[0 0 0]
432
+
433
+ [0 0 0]
434
+
435
+ [0 0 0]]]
436
+
437
+ 4 2
438
+
439
+ 4 [[[0 0 0]
440
+
441
+ [0 0 0]
442
+
443
+ [0 0 0]]
444
+
445
+
446
+
447
+ [[0 0 1]
448
+
449
+ [0 0 0]
450
+
451
+ [0 0 1]]
452
+
453
+
454
+
455
+ [[0 0 0]
456
+
457
+ [0 0 0]
458
+
459
+ [0 0 0]]]
460
+
461
+ ```

1

追記

2018/11/03 03:05

投稿

Fallout_18
Fallout_18

スコア124

test CHANGED
File without changes
test CHANGED
@@ -285,3 +285,7 @@
285
285
  んーなぜなのでしょう、通れない場合は、t+1秒後の粒子の位置はt秒後の位置からうごかないとしています。
286
286
 
287
287
  間違いやおかしい点に気づいた方、ご指摘のほどお願い致します。
288
+
289
+ (追記)
290
+
291
+ どうやら、たとえばnumber=1で、x+1に移動するときに0であった場合、動かないという指示を加えているのにも関わらず、x+1の0を採用してしまっているみたいです。