teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

Update

2022/01/05 04:38

投稿

melian
melian

スコア21263

answer CHANGED
@@ -2,7 +2,6 @@
2
2
  ```python
3
3
  from matplotlib import pyplot as plt
4
4
  from matplotlib.animation import ArtistAnimation
5
- import math
6
5
 
7
6
  W, H, LW = 100, 300, 2
8
7
  b = [0, 0]
@@ -12,22 +11,21 @@
12
11
  fig, ax = plt.subplots()
13
12
  ax.add_patch(plt.Rectangle(xy=(-LW, -LW), width=W+2*LW, height=H+2*LW, lw=LW, fill=False))
14
13
  for _ in range(100):
15
- prev = b[:]
14
+ prev = b[:]; newv = [1, 1]
16
15
  b[0] += v[0]; b[1] += v[1]
17
16
  if b[0] > W:
18
17
  b = [W, (v[1]/v[0])*(W-prev[0])+prev[1]]
19
- v[0] *= -1
18
+ newv[0] = -1
20
19
  if b[0] < 0:
21
20
  b = [0, (v[1]/v[0])*-prev[0]+prev[1]]
22
- v[0] *= -1
21
+ newv[0] = -1
23
22
  if b[1] > H:
24
- if 0 < b[0] < W:
25
- b = [(v[0]/v[1])*(H-prev[1])+prev[0], H]
23
+ b = [(v[0]/v[1])*(H-prev[1])+prev[0], H]
26
- v[1] *= -1
24
+ newv[1] = -1
27
25
  if b[1] < 0:
28
- if 0 < b[0] < W:
29
- b = [(v[0]/v[1])*-prev[1]+prev[0], 0]
26
+ b = [(v[0]/v[1])*-prev[1]+prev[0], 0]
30
- v[1] *= -1
27
+ newv[1] = -1
28
+ v = [v[0]*newv[0], v[1]*newv[1]]
31
29
  im = ax.scatter([b[0]], [b[1]], c="b")
32
30
  ims.append([im])
33
31