Programm gesucht zum "Linie verknäulen"

walfrieda

walfrieda

Aktives Mitglied
Thread Starter
Dabei seit
29.03.2006
Beiträge
9.252
Reaktionspunkte
1.173
Ich muß eine wissenschaftliche Hypothese grafisch darstellen, und such dazu ein Programm mit dem man:

a. eine Linie mit ein paar darauf befindlichen Markierungspunkten zeichnen kann (also zB mehrere Boxen in willkürlichem Abstand) - soweit kein Problem, das bekomm ich zB in Illustrator natürlich leicht hin. Diese Linie mit Boxen muß dann gruppiert werden und
b. ohne die Abstände der Boxen zueinander zu verändern "verknäult" werden. Etwa so als ob die Linie ein Stück Schnur wäre, das man zu einem Knäuel zusammenknüllt. Linie und Boxen müssen sich dabei so verformen lassen, wie sie es in einem Schnurknäuel täten. Auch ein "Entknäulen" muß wieder möglich sein.

Es soll mit Vektoren gearbeitet werden, nicht mit einem "Malprogramm", und soll am Ende auch noch gut aussehen ;)

Mit was für einem Programm kann man sowas machen?
 
Zuerst einmal, definiere "Knäuel" und muss das Knäuel eine bestimmte von dir festzulegende Gestalt haben oder kann es ruhig zufällig generiert werden?

Wenn letzteres der Fall ist, würde ich ungefähr so vorgehen: Man nehme eine beliebig große Liste von auf 1 normierten Vektoren (T_n) im R², die du zufällig generieren lässt. Diese Vektoren interpretiere man nun als Tangentenvektoren deiner"verknäulten" Linie. Diese verknäulte Linie sei so parametrisiert, dass bei t=0 (dem Anfangspunkt) die Kurve den ersten Tangentenvektor (T_1) hat, bei t=1 den zweiten Tangentenvektor (T_2) usw. Für 0<=t<=1 nehmen wir an, dass sich der Tangentenvektor linear von T_1 nach T_2 dreht (geometrisch betrachtet). Bei bekanntem Anfangspunkt kann man dann durch Integration die verknäulte Linie bestimmen. Bei großem n sollte dieses Linie (sehr viel) länger sein als die gegebene Linie mit den Markierungen. Aber wie bestimmt man nun die Länge der einzelnen Abschnitte und wo muss man die verknäulte Line "abschneiden", damit sie gerade die richtige Länge hat? Ganz einfach, wie wir uns erinnern, hat die Kurve an jedem Punkt einen Tangentenvektor mit Norm 1 (siehe oben), d.h., dass die geknäulte Linie nach der Länge der Linie parametrisiert ist und folglich muss man für den Parameter t der Linie nur die vorher bestimmten Längen einsetzen um zu erfahren, wo die Markierungen sind und wo die Kurve endet.

Zur Software: Das kann man recht einfach mit Mathematica oder einem anderen CAS deiner Wahl erledigen. Wenn meine Erklärungen ungefähr dem entsprechen was du suchst, kann ich dir gerne eine Lösung für dein Problem mit Mathematica schreiben (wenn du willst).

PS: Für eine Lösung müsstest du mir allerdings ungefähr einen Tag Zeit geben, da ich nicht weiß, wann ich dazu komme. Der Aufwand selbst sollte nicht sehr groß sein, aber ganz von alleine schreibt sich der Code nunmal auch nicht.
 
  • Gefällt mir
Reaktionen: walfrieda
Zuerst einmal, definiere "Knäuel" und muss das Knäuel eine bestimmte von dir festzulegende Gestalt haben oder kann es ruhig zufällig generiert werden?

es darf gern "zufällig" sein. Ich hab mal ein schnell in Illustrator zusammengeschustertes Beispiel angehängt. Oben die "Ausgangslinie" (keine Gerade) mit den darauf angeordneten Boxen. Unten das gewünschte Produkt des "Zusammenknäulens". Die Länge der beiden Linien (oben und unten) muss gleich lang sein, und die Abstände der Boxen zueinander und zum Anfang/Ende der Linie auch. Am besten wäre es, wenn man den Verlauf der Linien interaktiv "hinschieben" kann daß das Produkt am Ende ansprechend aussieht. Dabei müssten sich dann die Boxen zB. mitbiegen, wenn man die Linie an dieser Stelle biegt (Beispiel im unteren Bild, Box rechts oben).

Wenn letzteres der Fall ist, würde ich ungefähr so vorgehen: Man nehme eine beliebig große Liste von auf 1 normierten Vektoren (T_n) im R², die du zufällig generieren lässt. Diese Vektoren interpretiere man nun als Tangentenvektoren deiner"verknäulten" Linie. Diese verknäulte Linie sei so parametrisiert, dass bei t=0 (dem Anfangspunkt) die Kurve den ersten Tangentenvektor (T_1) hat, bei t=1 den zweiten Tangentenvektor (T_2) usw. Für 0<=t<=1 nehmen wir an, dass sich der Tangentenvektor linear von T_1 nach T_2 dreht (geometrisch betrachtet). Bei bekanntem Anfangspunkt kann man dann durch Integration die verknäulte Linie bestimmen. Bei großem n sollte dieses Linie (sehr viel) länger sein als die gegebene Linie mit den Markierungen. Aber wie bestimmt man nun die Länge der einzelnen Abschnitte und wo muss man die verknäulte Line "abschneiden", damit sie gerade die richtige Länge hat? Ganz einfach, wie wir uns erinnern, hat die Kurve an jedem Punkt einen Tangentenvektor mit Norm 1 (siehe oben), d.h., dass die geknäulte Linie nach der Länge der Linie parametrisiert ist und folglich muss man für den Parameter t der Linie nur die vorher bestimmten Längen einsetzen um zu erfahren, wo die Markierungen sind und wo die Kurve endet.

Zur Software: Das kann man recht einfach mit Mathematica oder einem anderen CAS deiner Wahl erledigen.

was ist ein CAS?

Ich dachte mehr an ein Grafikprogramm als an ein Mathematik-Programm, aber wenn man damit die Grundlage einer Vektorgrafik basteln kann die dem obigen Beispiel entspricht und das man zB in Illustrator importieren kann um daraus eine ansprechende Grafik zu machen, ist mir alles recht ;)

Beispiel:
muster.jpg
 
Müssen es unbedingt sich verbiegende Boxen sein? Das ist nämlich nicht einfach. Ich habe jetzt einfach mal große Punkte auf der Linie verteilt und ein Programm geschrieben, das eine gerade Linie mit diesen Punkten darauf zufällig verbiegt. Ganz so extrem wie in deinem Beispiel sieht das Knäuel zwar nicht aus (das könnte man aber sicher ändern, wenn man die Verteilungen, an Hand der die zufällig gewählten Parameter der resultierenden Kurve bestimmt werden, entsprechend anpasst, ich habe einfach erst einmal eine Gleichverteilung genommen). Kennst du zufällig eine kostenfreie Möglichkeit größere Datenmengen auszutauschen? Wenn ja, könnte ich dir ein kleines Video zukommen lassen, in dem der "Verknäuelvorgang" gezeigt wird (und natürlich ein PDF des Endzustands)).
 
  • Gefällt mir
Reaktionen: walfrieda
Müssen es unbedingt sich verbiegende Boxen sein? Das ist nämlich nicht einfach. Ich habe jetzt einfach mal große Punkte auf der Linie verteilt und ein Programm geschrieben, das eine gerade Linie mit diesen Punkten darauf zufällig verbiegt. Ganz so extrem wie in deinem Beispiel sieht das Knäuel zwar nicht aus (das könnte man aber sicher ändern, wenn man die Verteilungen, an Hand der die zufällig gewählten Parameter der resultierenden Kurve bestimmt werden, entsprechend anpasst, ich habe einfach erst einmal eine Gleichverteilung genommen). Kennst du zufällig eine kostenfreie Möglichkeit größere Datenmengen auszutauschen? Wenn ja, könnte ich dir ein kleines Video zukommen lassen, in dem der "Verknäuelvorgang" gezeigt wird (und natürlich ein PDF des Endzustands)).

Du hast gleich ne PN! ;)

edit: ne, hast du nicht, geht bei deinem Account offenbar nicht. Meld dich doch umgekehrt kurz bei mir!
 
Zurück
Oben Unten