Hallo! Ich möchte eine Kette von n < 20 Linien in Python erzeugen, in etwa so wie hier: https://stackoverflow.com/questions/17240694/python-how-to-plot-one-line-in-different-colors Das ganze soll zwar zufällig generiert werden, allerdings müssen ein paar Rahmenbedingungen eingehalten werden: - Der Winkel zwischen den Linien darf nicht zu Spitz sein - Die länge der einzelnen Linien soll in einem bestimmten Bereich liegen - Wenn sich Linien überschneiden, dann nur wenn der Winkel zwischen ihnen nicht zu spitz ist Meine Idee wäre eine Funktion zu schreiben die eine Linie generiert in dem sie einen weiteren Punkt in ein Punktearray hinzufügt und dann schaut wie der Winkel in Bezug zur vorherigen Linie ist. Wenn der Winkel zu spitz ist wird ein neuer Zufallswert generiert und überprüft..d as geht so lange bis eine Lösung gefunden wurde... für die anderen Bedingungen wende ich ein ähnliches verfahren an. Macht das Sinn oder geht das auch einfacher? Ich erwarte natürlich nun kein fertigen Code, aber um ein paar Hinweise wie sich sowas anstellen lässt wäre ich dankbar. Ich verstehe z.b in dem Beispiel Code diese Anweisung nicht: xy = (np.random.random((10, 2)) - 0.5).cumsum(axis=0) Es wird ein Array mit 10 Wartepaaren erzeugt.. aber wofür sorgt CumSum? Grus A.B
:
Bearbeitet durch User
Ja genau so geht das. https://docs.scipy.org/doc/numpy/reference/generated/numpy.cumsum.html Du bekommst direkt die Punkte und nicht nur Richtungsvektoden.
:
Bearbeitet durch User
A. B. schrieb: > Meine Idee wäre eine Funktion zu schreiben die eine Linie generiert in > dem sie einen weiteren Punkt in ein Punktearray hinzufügt und dann > schaut wie der Winkel in Bezug zur vorherigen Linie ist. Wenn der Winkel > zu spitz ist wird ein neuer Zufallswert generiert und überprüft..d as > geht so lange bis eine Lösung gefunden wurde... für die anderen > Bedingungen wende ich ein ähnliches verfahren an. Macht das Sinn oder > geht das auch einfacher? Verstehe ich nicht. Alle (Pseudo)zufallsfunktionen in den Programmiersprachen die ich kenne liefern Zufallswerte in einem bestimmten Bereich. Also kann man diesen Bereich durch einfache Multiplikation eines Faktors und Addition eines Offsets auf den gewünschen Bereich abbilden. Also 2 Zufallswerte für den Winkel und die Länge der nächsten Linie und Linie zeichnen.
A. B. schrieb: > - Wenn sich Linien überschneiden, dann nur wenn der Winkel zwischen > ihnen nicht zu spitz ist Der Punkt ist natürlich nicht ganz so einfach, da müsste man nochmal darüber nachdenken.
Der Andere schrieb: > Also 2 Zufallswerte für den Winkel und die Länge der nächsten Linie und > Linie zeichnen Da könnte dann aber die Forderung A. B. schrieb: > - Wenn sich Linien überschneiden, dann nur wenn der Winkel zwischen > ihnen nicht zu spitz ist dazwischenfunken.
Wie wäre es wenn man Punkte über alle geraden Interpoliert und in ein Array Schriebt. Wenn dann zwei Werte in dem Array sehr nah bei einander Liegen gibt es entweder ein Schnitt oder sie kommen sich sonst verdächtig nahe was auch nicht umbedingt gewünscht ist. Dann zeichnet man aus den Wartepaaren die sich nahe kommen jeweils zwei Linien und überprüft den Winkel..
A. B. schrieb: > oder sie kommen sich sonst > verdächtig nahe was auch nicht umbedingt gewünscht ist. Du solltest deine Anforderungen -schon für dich selbst- mal sauber und in Werte gefasst zusammenschreiben. J. T. schrieb: > Da könnte dann aber die Forderung > > A. B. schrieb: >> - Wenn sich Linien überschneiden, dann nur wenn der Winkel zwischen >> ihnen nicht zu spitz ist > > dazwischenfunken. Wie ich schon schrieb. Das hat der TO aber auch noch nicht gelöst. Dazu muss man nach dem Erzeugen der Linie alle anderen abklappern und prüfen ob sich was schneidet und dann ggf. neu generieren, oder sich einen cleveren Algorithmus einfallen lassen, der eine Beschränkung der Länge in Abhängigkeit des gewählten Winkels der neuen Linie oder vice versa berechnet. Inwiefern das dann aber die Zufälligkeit beeinträchtigt ist ein anderes Blatt. Genauso wie wirklich zufällig das sein muss. Da aber hier nur unscharfe Bedingungen genannt werden die dann auch noch mit noch unscharferen ergänzt werden bin ich erst mal raus, viel Spass noch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.