Angenommen, die Abmessungen meines Fensters betragen 400 x 600.Wie erzeugt man zufällige Punkte außerhalb eines Rechtecks?
Es ist relativ leicht, einen beliebigen Punkt auf einer einzigen Seite zu erzeugen, lassen Sie sich mit der Spitze an sagen:
random.randint(0, width)
Aber was wäre der klügste Weg, dies für alle 4 Seiten zur Arbeit zu kommen, so dass ein Random Point wird außerhalb eines Rechtecks generiert?
Wenn ich
pos_x = [random.randint(0, width)]
pos_y = [random.randint(0, height)]
tun Sie zeigen nur an den Ecken nach oben, was Sinn macht. Der einzige Weg, an den ich denken kann, ist, zufällig einen Punkt innerhalb des Rechtecks zu erzeugen, zu vergleichen, welche Achse am nächsten an einer Grenze ist, und dann zu klammern. Tatsache ist, dass ich nicht weiß, wie ich das elegant machen kann, ohne 4 Kontrollen für jede Seite zu machen (was sich überflüssig anfühlt). Ich habe das Gefühl, dass es eine einfachere Lösung dafür gibt?
Hier ist eine Lösung, die fast funktioniert, aber es ist so langatmig. Habe gerade gemerkt, dass dies weniger Punkte in den Ecken bekommt.
# Create a random point inside the rectangle
pos_x = random.randint(0, width)
pos_y = random.randint(0, height)
# Get a distance for each side
left_border = pos_x
right_border = width-pos_x
top_border = pos_y
bottom_border = height-pos_y
borders = [left_border, right_border, top_border, bottom_border]
index_1 = 0
index_2 = 2
closest_side = 0
# Get closest from left/right borders
if right_border < left_border:
index_1 = 1
# Get closest from top/bottom borders
if bottom_border < top_border:
index_2 = 3
# Get closest border
if borders[index_1] < borders[index_2]:
closest_side = index_1
else:
closest_side = index_2
if closest_side == 0:
obj.pos.x = 0 # Clamp to left wall
elif closest_side == 1:
obj.pos.x = width # Clamp to right wall
elif closest_side == 2:
obj.pos.y = 0 # Clamp to top wall
else:
obj.pos.y = height # Clamp to bottom wall
Wo ist (0, 0), die obere linke Ecke des Recrangle? – ayhan
@ayhan Ja, das ist richtig. –
Möglicherweise verwandt: [Pythonic Weg, um zufällig gleichmäßig verteilt Punkte innerhalb hohlen quadratischen Lamina zu erzeugen] (http://StackOverflow.com/q/37101001/190597) – unutbu