Forum: PC-Programmierung Kette von zufälligen Linien in Python erstellen?


von A. B. (sfalbuer)


Angehängte Dateien:

Lesenswert?

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
von Benedikt S. (benedikt_s)


Lesenswert?

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
von Der Andere (Gast)


Lesenswert?

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.

von Der Andere (Gast)


Lesenswert?

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.

von J. T. (chaoskind)


Lesenswert?

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.

von A. B. (sfalbuer)


Lesenswert?

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..

von Der Andere (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.