Turtle
022_Nonoverlapping_Circles.py
import math
import random
import os
from drawMethods import fillCircle
from palettes import randomPalette
from util import getTurtleAndScreen
# Circles
# CAC, 3/27/2023
def dist(x, y, x2, y2):
return math.sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2))
def Draw():
numCircles = random.randint(50,200)
large = random.randint(0, 1)==0
if large:
title = "Nonoverlapping Circles (Large) "+str(numCircles)
else:
title = "Nonoverlapping Circles (small) " + str(numCircles)
width = 800
height = 600
filename = os.path.basename(__file__)[0:-3]
turtle, screen = getTurtleAndScreen(title,width,height,filename,moveWorld=True)
colors = randomPalette()
bg = random.choice(colors)
screen.bgcolor(bg)
colors.remove(bg)
circles=[]
for i in range(0,numCircles):
intersect=True
failures = 0
while intersect is True and failures<100:
intersect=False
if large:
radius = random.randint(50,100)
else:
radius = random.randint(10,40)
x=random.randint(radius,width-radius)
y=random.randint(radius,height-radius)
for circle in circles:
x2,y2,r2=circle
if dist(x,y,x2,y2) < radius + r2:
intersect = True
failures = failures + 1
if not intersect:
turtle.color(random.choice(colors))
fillCircle(turtle,x,y,radius)
circles.append((x,y,radius))
screen.mainloop()
# ----------------------------------------------------------------
if __name__ == '__main__':
Draw()
|