Kette von zufälligen Linien in Python erstellen?

OP #5027240
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
Angehängte Dateien:
Gast #5027282
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.
OP #5027343
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..
Gast #5027364
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren