[pythn] 30줄 칸 자동 그림
개요
python으로 단원 자동 그림을 몰래 씁니다.
arch linux, python3.5 완성.
생명 게임
생명 게임
회색 이미지처럼 자동 마톤을 처리하면scipy의 볼륨 계산은 matplitlib의 이미지 디스플레이 기능으로 쉽게 할 수 있습니다.
그림으로 보이기 때문에 축소하면 칸을 손상시킬 수 있습니다.import numpy as np
import scipy.signal
import matplotlib.pyplot as plt
h = np.array([[1, 1, 1],
[1, 0, 1],
[1, 1, 1]])
def update(U):
'''
Update rule:
current_state\N_neighbors | 0 1 2 3 4 5 6 7 8
---------------------------+----------------------------------
0 | 0 0 0 1 0 0 0 0 0
1 | 0 0 1 1 0 0 0 0 0
'''
N_neighbors = scipy.signal.convolve2d(U, h, boundary='wrap', mode='same')
U_next = np.zeros_like(U)
U_next[N_neighbors == 3] = 1
U_next[np.logical_and(N_neighbors == 2, U == 1)] = 1
return U_next
size = (256, 256)
U = np.random.randint(2,size=size)
fig = plt.figure()
ax = fig.add_subplot(111)
img = ax.imshow(U, interpolation="nearest", cmap=plt.cm.gray)
i = 0
while True:
U = update(U)
img.set_data(U)
i += 1
ax.set_title("t = {}".format(i))
plt.pause(0.01)
조화 모드
조화 모드
단원 자동화의 정의에서 벗어날 수 있지만 확산 반응 시스템도 마찬가지다.
업데이트는 다음과 같은 조정 모드를 사용합니다.\begin{align}
\frac{\partial u}{\partial t} &= D_u \nabla u + u ( 1 - u^2) - v \\
\frac{\partial v}{\partial t} &= D_v \nabla v + 3 u - 2 v
\end{align}
$u(x, y)$를 픽셀 값으로 표시계산에만 사용됩니다.
$D_u$, $D_v달러는 확산 계수다.
이 계수는 도안이 형성되었는지 형성되지 않았는지, 발산되었는지 결정한다.
이번에는 $D.u=0.2, D_v=1.8달러로 도안이 형성되었습니다.(시도 및 오류에 의해 결정됨)
이번에는 scipy의 라프라스 필터로 $\nabla달러를 계산합니다.import numpy as np
import scipy.ndimage.filters
import matplotlib.pyplot as plt
lap = lambda X: scipy.ndimage.filters.laplace(X)
def update(U, V, Du=0.2, Dv=1.8):
return (Du*lap(U) + U*(1.-U*U) - V,
Dv*lap(V) + 3.*U - 2.*V)
size = (64, 64)
U = np.random.random(size)
V = np.random.random(size)
dt = 0.1
fig = plt.figure()
ax = fig.add_subplot(111)
img = ax.imshow(U, interpolation="nearest", cmap=plt.cm.gray)
view_interval = 10
for i in range(10000):
dU, dV = update(U, V)
U += dt*dU
V += dt*dV
if i % view_interval == 0:
img.set_data(U)
ax.set_title("t = {}".format(i))
plt.pause(0.01)
plt.show()
업데이트식 대신 핏스퓨치-남운 방정식을 사용하면 이미지가 불안정하게 진동해 생물처럼 꿈틀거린다.재미있었어
Reference
이 문제에 관하여([pythn] 30줄 칸 자동 그림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/krrka/items/e5c0720ac6382e61dc60
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
생명 게임

회색 이미지처럼 자동 마톤을 처리하면scipy의 볼륨 계산은 matplitlib의 이미지 디스플레이 기능으로 쉽게 할 수 있습니다.
그림으로 보이기 때문에 축소하면 칸을 손상시킬 수 있습니다.
import numpy as np
import scipy.signal
import matplotlib.pyplot as plt
h = np.array([[1, 1, 1],
[1, 0, 1],
[1, 1, 1]])
def update(U):
'''
Update rule:
current_state\N_neighbors | 0 1 2 3 4 5 6 7 8
---------------------------+----------------------------------
0 | 0 0 0 1 0 0 0 0 0
1 | 0 0 1 1 0 0 0 0 0
'''
N_neighbors = scipy.signal.convolve2d(U, h, boundary='wrap', mode='same')
U_next = np.zeros_like(U)
U_next[N_neighbors == 3] = 1
U_next[np.logical_and(N_neighbors == 2, U == 1)] = 1
return U_next
size = (256, 256)
U = np.random.randint(2,size=size)
fig = plt.figure()
ax = fig.add_subplot(111)
img = ax.imshow(U, interpolation="nearest", cmap=plt.cm.gray)
i = 0
while True:
U = update(U)
img.set_data(U)
i += 1
ax.set_title("t = {}".format(i))
plt.pause(0.01)
조화 모드
조화 모드
단원 자동화의 정의에서 벗어날 수 있지만 확산 반응 시스템도 마찬가지다.
업데이트는 다음과 같은 조정 모드를 사용합니다.\begin{align}
\frac{\partial u}{\partial t} &= D_u \nabla u + u ( 1 - u^2) - v \\
\frac{\partial v}{\partial t} &= D_v \nabla v + 3 u - 2 v
\end{align}
$u(x, y)$를 픽셀 값으로 표시계산에만 사용됩니다.
$D_u$, $D_v달러는 확산 계수다.
이 계수는 도안이 형성되었는지 형성되지 않았는지, 발산되었는지 결정한다.
이번에는 $D.u=0.2, D_v=1.8달러로 도안이 형성되었습니다.(시도 및 오류에 의해 결정됨)
이번에는 scipy의 라프라스 필터로 $\nabla달러를 계산합니다.import numpy as np
import scipy.ndimage.filters
import matplotlib.pyplot as plt
lap = lambda X: scipy.ndimage.filters.laplace(X)
def update(U, V, Du=0.2, Dv=1.8):
return (Du*lap(U) + U*(1.-U*U) - V,
Dv*lap(V) + 3.*U - 2.*V)
size = (64, 64)
U = np.random.random(size)
V = np.random.random(size)
dt = 0.1
fig = plt.figure()
ax = fig.add_subplot(111)
img = ax.imshow(U, interpolation="nearest", cmap=plt.cm.gray)
view_interval = 10
for i in range(10000):
dU, dV = update(U, V)
U += dt*dU
V += dt*dV
if i % view_interval == 0:
img.set_data(U)
ax.set_title("t = {}".format(i))
plt.pause(0.01)
plt.show()
업데이트식 대신 핏스퓨치-남운 방정식을 사용하면 이미지가 불안정하게 진동해 생물처럼 꿈틀거린다.재미있었어
Reference
이 문제에 관하여([pythn] 30줄 칸 자동 그림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/krrka/items/e5c0720ac6382e61dc60
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
\begin{align}
\frac{\partial u}{\partial t} &= D_u \nabla u + u ( 1 - u^2) - v \\
\frac{\partial v}{\partial t} &= D_v \nabla v + 3 u - 2 v
\end{align}
import numpy as np
import scipy.ndimage.filters
import matplotlib.pyplot as plt
lap = lambda X: scipy.ndimage.filters.laplace(X)
def update(U, V, Du=0.2, Dv=1.8):
return (Du*lap(U) + U*(1.-U*U) - V,
Dv*lap(V) + 3.*U - 2.*V)
size = (64, 64)
U = np.random.random(size)
V = np.random.random(size)
dt = 0.1
fig = plt.figure()
ax = fig.add_subplot(111)
img = ax.imshow(U, interpolation="nearest", cmap=plt.cm.gray)
view_interval = 10
for i in range(10000):
dU, dV = update(U, V)
U += dt*dU
V += dt*dV
if i % view_interval == 0:
img.set_data(U)
ax.set_title("t = {}".format(i))
plt.pause(0.01)
plt.show()
Reference
이 문제에 관하여([pythn] 30줄 칸 자동 그림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/krrka/items/e5c0720ac6382e61dc60텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)