Wie generieren Quadrate (zufällig befindet sich, gleich große, zufällig gedreht), die sich nicht überschneiden?

Habe ich gearbeitet, auf die Schaffung einer Schicht von zufällig gedreht und platziert Quadrate auf einem 1x1 Gitter. Ich war in der Lage, generieren Sie ein einzelnes Quadrat, das ist zufällig platziert und gedreht auf dem raster, aber ich bin mir nicht sicher, wie Sie Sie, den code zu verbessern, mehr zu erzeugen zufällige Quadrate, die nicht miteinander überschneiden. Aktuelle code unten gesehen:

Beispiel meiner Einer Randomisierten Platz

from math import cos, pi, sin
from random import randint
from matplotlib.mlab import frange
from matplotlib.pyplot import plot, axis, show

def flake_position_layer1(): #Determines the initial position of one corner of the square
    x0 = randint(0, 100) / 100
    y0 = randint(0, 100) / 100
    theta = randint(0, 90) * pi / 180 #Angle of rotation for the square
    return x0, y0, theta


def flake_shape(): #generates the other 3 corners of the square
    x0, y0, z, theta = flake_position_layer1()
    x1 = x0 + (0.1 * cos(theta))
    x2 = x1 + (0.1 * cos((90 * pi/180) + theta))
    x3 = x2 + (0.1 * cos((180 * pi/180) + theta))
    y1 = y0 + (0.1 * sin(theta))
    y2 = y1 + (0.1 * sin((90 * pi/180) + theta))
    y3 = y2 + (0.1 * sin((180 * pi/180) + theta))
    return x0, x1, x2, x3, y0, y1, y2, y3


def display(): #connects the 4 corners on a plot
    x0, x1, x2, x3, y0, y1, y2, y3 = flake_shape()
    return plot([x0, x1, x2, x3, x0], [y0, y1, y2, y3, y0])


display()
axis([0,1,0,1]) #1x1 grid
show()

Habe ich nicht ein CS-hintergrund (ich bin ein environmental engineering major) und ich bin sehr unerfahren mit Programmieren. Bitte geben Sie mir irgendwelche Empfehlungen, die Sie haben, für mich zu versuchen und dieses problem anzugehen mit!

  • Ist es möglich, zu prüfen, eine kreisförmige enveloppe rund um den Platz ? In einem solchen Fall können Sie das Zentrum der einzelnen Plätze und stellen Sie sicher, dass der Abstand zwischen den beiden center > 2*z.
  • Verwenden rejection sampling, mehr zu erzeugen Quadrate: if(current square overlaps) reject(); else add_square_to_list();
  • Wie groß tun, die Plätze werden müssen? Wenn Sie können, machen Sie weniger als ~70% (1/√2) die grid-Größe, die Sie nie überlappen.
Schreibe einen Kommentar