Я пытаюсь создать неперекрывающиеся прямоугольные карточки и размещать их в произвольных местах в Zelle Graphics. xMin и yMin - это координата левого верхнего угла, а xMax и yMax - правый нижний угол прямоугольника. Я попытался сгенерировать случайную (xCenter, yCenter) координату, чтобы создать новый прямоугольник и проверить, перекрывает ли новый прямоугольник какие-либо из существующих прямоугольников. Если он перекрывается, генерируйте новые случайные точки, пока он больше не будет перекрываться.
У меня есть функция для проверки перекрытия, но у меня возникли проблемы с циклом while. Я новичок в Python, поэтому я очень признателен за вашу помощь!
from graphics import *
from random import randrange *
def checkLocation(xMin,xMax,yMin,yMax,xMinList,xMaxList,yMinList,yMaxList):
for x in range (xMin,xMax):
for y in range (yMin,yMax):
for i in range(len(xMinList)):
if xMinList[i] < x < xMaxList[i] and yMinList[i] < y < yMaxList[i]:
return False
#if the new rectangle isn't overlapping, append its 4 corner into the list for future comparison:
xMinList.append(xMin)
xMaxList.append(xMax)
yMinList.append(yMin)
yMaxList.append(yMax)
return xMinList,xMaxList,yMinList,yMaxList
def main():
win = GraphWin("Flash Card", 800,800)
xCenter, yCenter = randrange (200,600), randrange (200,600) #display the words from the text in randomly generated locations
xMin = xCenter - 50
xMax = xCenter + 50
yMin = yCenter - 50
yMax = yCenter + 50
xMinList = [300,500,200,100,600] #I hard coded these 4 lists for the purpose of testing
xMaxList = [350,580,220,140,650]
yMinList = [100,500,300,600,400]
yMaxList = [160,540,325,680,450]
#while checkLocation is False (location overlapping), check again until it's True (not overlapping)
while not checkLocation(xMin,xMax,yMin,yMax,xMinList,xMaxList,yMinList,yMaxList):
checkLocation(xMin,xMax,yMin,yMax,xMinList,xMaxList,yMinList,yMaxList)
xMinList, xMaxList,yMinList,yMaxList = checkLocation(xMin,xMax,yMin,yMax,xMinList,xMaxList,yMinList,yMaxList)
rect = Rectangle (Point(xMin,yMin),Point(xMax,yMax))
rect.draw(win)
Основной ()