728x90
임의의 3개의 점들에 대해 :
임의의 4개의 점들에 대해 :
임의의 5개의 점에 대해 :
임의의 6개의 점들에 대해 :
임의의 7개의 점들에 대해 :
임의의 8개 점들에 대해 :
임의의 9개 점들에 대해 :
임의의 10개 점들에 대해 :
실행 코드 (12.py) : 최적화 미진행 버젼임.
import pygame, sys
from pygame.locals import *
import random
import numpy as np
import matplotlib.pyplot as plt
import math
def points_draw(points, dis_min, N):
random.shuffle(points)
dis = 0
c_x = 0
c_y = 0
for i in range(len(points)):
if i < len(points)-1:
x0 = points[i][0]
y0 = points[i][1]
x1 = points[i+1][0]
y1 = points[i+1][1]
elif i == len(points)-1:
x0 = points[i][0]
y0 = points[i][1]
x1 = points[0][0]
y1 = points[0][1]
dis += np.abs(x1 - x0)
dis += np.abs(y1 - y0)
c_x += x0
c_y += y0
cc_x = int(c_x/N)
cc_y = int(c_x/N)
if dis < dis_min:
screen.fill('#000000')
angle = []
for j in range(len(points)):
if j < len(points)-1:
x0 = points[j][0]
y0 = points[j][1]
x1 = points[j+1][0]
y1 = points[j+1][1]
dx = cc_x - x0
dy = cc_y - y0
angle.append(math.atan2(dy, dx))
pygame.draw.line(screen, '#00FF00', [x0, y0], [x1, y1], 1)
pygame.draw.circle(screen, '#FF0000', [x0, y0], 3)
elif j == len(points)-1:
x0 = points[j][0]
y0 = points[j][1]
x1 = points[0][0]
y1 = points[0][1]
dx = cc_x - x0
dy = cc_y - y0
angle.append(math.atan2(dy, dx))
pygame.draw.line(screen, '#00FF00', [x0, y0], [x1, y1], 1)
pygame.draw.circle(screen, '#0000FF', [x0, y0], 3)
pygame.draw.circle(screen, '#FFFFFF', [cc_x, cc_y], 3)
dis_min = dis
print(angle)
return dis_min
pygame.init()
dis_width = 600
dis_height = 600
N = 6
screen = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption(str(N)+' points Simulation')
font = pygame.font.Font("C:\Windows\Fonts\HYSANB.ttf", 20)
FPS = 10
clock = pygame.time.Clock()
points = []
for i in range(N):
x = random.randint(5, 595)
y = random.randint(5, 595)
points.append((x, y))
dis_min = 600*600
cou = 0
while True: # the main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == K_DOWN:
N -= 1
if event.key == K_UP:
N += 1
pygame.display.set_caption(str(N)+' points Simulation')
points = []
for i in range(N):
x = random.randint(5, 595)
y = random.randint(5, 595)
points.append((x, y))
dis_min = 600*600
cou = 0
dis_min = points_draw(points, dis_min, N)
#print(str(N) +' : ', dis_min)
pygame.display.update()
clock.tick(FPS)
pygame.quit()
728x90
'수학 & 코딩' 카테고리의 다른 글
URL 주소 크롤링(무한) 파이썬 코드 - 네이버를 시작으로 (0) | 2023.02.23 |
---|---|
원주율 파이를 소숫점 1만개 자리까지 구하기 (0) | 2023.02.22 |
2차원 평면에 임의 반지름을 갖는 임의의 갯수의 공들이 겹치는 부분이 있으면 반발하도록 하는 움직임 - 공간 내에서 입자(공)간 서로 반발하는 현상 모사 - 분자 운동 - 코드 조언은 "chatGPT"로.. (0) | 2023.02.21 |
2차원 평면에서 임의의 점을 모두 연결하는 다각형 폐곡면을 그리는 코드 (N 가능) (0) | 2023.02.20 |
코딩 문제 - 2302161617 (0) | 2023.02.16 |