mikrocontroller.net

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


Autor: A. B. (sfalbuer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte eine Kette von n < 20 Linien in Python erzeugen, in etwa so 
wie hier:

https://stackoverflow.com/questions/17240694/pytho...

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
Autor: Benedikt S. (benedikt_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau so geht das.
https://docs.scipy.org/doc/numpy/reference/generat...

Du bekommst direkt die Punkte und nicht nur Richtungsvektoden.

: Bearbeitet durch User
Autor: Der Andere (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Der Andere (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: J. T. (chaoskind)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. B. (sfalbuer)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Der Andere (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.