파이썬 turtle 뻘짓

# 환공포증 유발프로그램
# 반지름 20~50의 원 200개를 생성
# 조건 : 원은 서로 겹치지 X
# 최대한 큰 크기로 최소한의 공간만을 남기며 원을 생성하고싶음.

import random as r
import turtle as t
import math as m
import time


def tmove(x, y):
    t.penup()
    t.goto(x, y)
    t.pendown()


def is_near_circles(x, y, r, circles):
    if len(circles) == 0:
        return False

    for itme in circles:
        cl = m.sqrt(pow(itme[0]-x, 2) + pow(itme[1]-y, 2))
        if int(cl) <= itme[2] + r:
            return True

    return False


tmove(-300, 300)
t.goto(300, 300)
t.goto(300, -300)
t.goto(-300, -300)
t.goto(-300, 300)

t.speed(100)
t.colormode(255)

c_list = list()
count = 0
X = 0
Y = 0
R = 0
tmove(0, 0)

while count <= 200:
    t.pencolor(r.randint(0, 255), r.randint(0, 255), r.randint(0, 255))
    X = r.randint(-250, 250)
    Y = r.randint(-250, 250)
    R = r.randint(30, 50)

    if is_near_circles(X, Y, R, c_list):
        continue

    t.dot(R)
    tmove(X, Y)
    c_list.append([X, Y, R])
    count += 1

time.sleep(1)


for item in c_list:
    print(item)
print('count =', count)

원이 겹치지 않게 하면서 최대한 꽉꽉 채워넣고싶지만
실상은 위치 찾느라 움직이지도 못하는 turtle…

  • 원 안 겹침 :white_check_mark:
  • 공간 빼곡히 채움 :x:
  • 시간 단축 :x:

위치를 계속 랜덤으로만 설정하는게 문제인 것 같습니다
일주일 뒤 미래의 나에게 맡기도록 하죠 ^^

2 Likes

:crazy_face:

:+1: