回答編集履歴
1
Update
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
|
-
|
18
|
+
newv[0] = -1
|
20
19
|
if b[0] < 0:
|
21
20
|
b = [0, (v[1]/v[0])*-prev[0]+prev[1]]
|
22
|
-
|
21
|
+
newv[0] = -1
|
23
22
|
if b[1] > H:
|
24
|
-
if 0 < b[0] < W:
|
25
|
-
|
23
|
+
b = [(v[0]/v[1])*(H-prev[1])+prev[0], H]
|
26
|
-
|
24
|
+
newv[1] = -1
|
27
25
|
if b[1] < 0:
|
28
|
-
if 0 < b[0] < W:
|
29
|
-
|
26
|
+
b = [(v[0]/v[1])*-prev[1]+prev[0], 0]
|
30
|
-
|
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
|
|