본문 바로가기

파이썬(PYTHON)

확산 - 파이썬으로 점들의 모임이 임의 움직임 확산 모델링 해봄.

728x90
# 화면 크기
w = GetSystemMetrics(0)
h = GetSystemMetrics(1)
 
# 정사각형
w = h
# 검정색 화면 배경
img = np.zeros((h, w, 3), np.uint8)

X = []; Y = []
 
# 확산할 점(사각)들의 총 수량
LL = 400
 
# 위치 선정 - 동일한 위치에 또는 임의의 위치에
for i in range(LL):
    #x = random.randint(0, w)
    #y = random.randint(0, h)
    x = int(w/2)
    y = int(h/2)
    X.append(x)
    Y.append(y)
X = np.array(X)
Y = np.array(Y)
#print(X, X[0], X[1])

# 사각형 점의 가로(높이), 세로(폭) 픽셀
k = 5
 
# 확산 속도 - 추후 온도 등의 매개변수로 활용 가능
sp = 5
 
# 영역에 남은 점들 수 (퍼센트로)
r = [];
 
# 연산 횟수 : 경과 시간으로 보면됨.
C = []
cou = 0
while True:
    img = np.zeros((h, w, 3), np.uint8)
    se = 0
    cou += 1
    for i in range(LL)
 
# 경계 영역에서 벗어난 점들은 제외
        if X[i] > k and X[i] < w-k and Y[i] > k and Y[i] < h-k:
            xp = X[i]
            yp = Y[i]
 
# 점들의 위치 변화
            xp += random.randint(-sp, sp)
            yp += random.randint(-sp, sp)
 
# 영역 이미지에 점들을 녹색으로 표시
            img = cv2.rectangle(img, (xp-k, yp-k), (xp+k, yp+k), (0, 255, 0), -1)
            X[i] = xp
            Y[i] = yp
            se += 1
  
# 점들의 변화를 퍼센트로 수집
    r.append(se*100/LL)
 
# 변화 횟수 수집
    C.append(cou)
 
# 퍼센트 변화에 대한 곡선 함수
    coef = np.polyfit(r, C, 1)
 
# 점들의 움직임을 이미지로 나타냄
    cv2.imshow('img', img)
    cv2.waitKey(1)
 
# 남은 점들을 퍼센트로 나타냄
    plt.plot(C, r, 'r')
    plt.pause(0.001)
    plt.clf()

 

728x90