[FIXED] Zufällige Punkte innerhalb der Parabel mit Python zeichnen?

Ausgabe

Haben Sie sich gefragt, wie Sie 100 zufällige Punkte innerhalb der Parabel unten generieren und auch sicherstellen können, dass diese Punkte y-Werte kleiner als 15000 haben?

x = np.linspace(-100,100)
y = 2*x**2+10*x

plt.plot(x,y)
plt.show()

Handlung

Jede Hilfe wäre willkommen. Vielen Dank!

Lösung

Geben Sie hier die Bildbeschreibung ein

Der übliche Boilerplate

import numpy as np
import matplotlib.pyplot as plt

Wir wollen Punkte in einem Rechteck (x0, x0+dx) × (y0, y0+dy) erzeugen und Punkte unter der Parabel verwerfen.

Der y-Bereich ist einfach, y0=0unddy=15000
y0=ymin=y(-2.5) , dy=15000-ymin, für den x-Bereich müssen wir 2 x² + 10 x = 15000 ⇒ x₁ = (-5 – √(5²+2·15000))/2 und x₂ = (-5 + √) lösen (5²+2·15000))/2.

x0, dx = (-5-np.sqrt(30025))/2, np.sqrt(30025)
y0, dy = 2*6.25+10*(-2.5), 15000.0-(2*6.25+10*(-2.5))

Jetzt generieren wir eine Liste von zufälligen Punkten, die zunächst ungültig ist

xy = []

Dann generieren wir die Koordinaten eines Punktes, prüfen, ob sie gültig sind, und wiederholen, bis wir 100 gültige Punkte gesammelt haben.

while len(xy) < 100:
    x = x0 + np.random.rand()*dx
    y = np.random.rand()*15000
    if y<2*x*x+10*x : continue # i.e., start a new iteration w/o appending
    xy.append((x,y))

Beim Zeichnen verwende ich nun einen Bereich, der symmetrisch zur Symmetrieachse der Parabel ist, dann zeichne ich die Punkte mit scatter(beachten Sie *zip(*iterable), dass dies zum Transponieren einer 2D-Liste verwendet wird) und zeichne schließlich eine horizontale gestrichelte Linie.

x = np.linspace(-2.5-100, -2.5+100, 801)
y = 2*x*(x+5)

plt.plot(x, y)
plt.scatter(*zip(*xy), s=1)
plt.hlines(15000, x[0]-5, x[-1]+5, linestyles='dashed')

plt.show()


Beantwortet von –
gboffi


Antwort geprüft von –
Katrina (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like