PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was für Mathematiker


Dr.Doom
2008-04-02, 11:44:15
Howdy,

ich bastle immernoch/wieder an meinem Grapheditor (Java).

http://mitglied.lycos.de/bratworscht/bilder/graph.jpg

Zwischen Knoten kann ich Kanten ziehen: wo der Start- bzw Endpunkt einer Kante ist, habe ich bereits berechnet (siehe Grafik bei 1, rote Markierungen).
Mittelpunkt Knoten 1 (s1x,s1y)
Mittelpunkt Knoten 2 (e1x,e1y)
Startpunkt Kante (s2x,s2y)
Endpunkt Kante (e2x,e2y)

Mit diesen Informationen kann ich eine Kante von Knoten 1 nach Knoten 2 zeichnen (siehe Bild bei 2).

Das Problem ist nun noch, wenn es auch eine Kante zwischen Knoten 2 und Knoten 1 gibt, dann liegen beide Kanten gezeichnet genau übereinander (siehe Bild bei 3). D.h. wenn es zwischen zwei Knoten zwei Kanten gibt, müssen diese in diesem Fall etwas auseinandergezogen werden. (siehe Bild 3, graue Skizzierungen).

Ich weiss nun leider nicht, wie ich für diesen Fall der zwei Kanten zwischen Knoten neue Werte für den Start- und Endpunkt einer Kante berechnen kann, so wie es im Bild bei 4 angedeutet ist!
Kann mir da bitte jemand unter die Arme greifen?

pest
2008-04-02, 11:49:53
ich würde da nix neu berechnen, sondern beim gerichteten Graphen die Bögen einfach mit einer Art Ellipse zeichnen,

http://upload.wikimedia.org/wikipedia/de/thumb/1/1a/Graph_gerichtet_Mehrfachkanten.svg/200px-Graph_gerichtet_Mehrfachkanten.svg.png

Dr.Doom
2008-04-02, 11:52:49
Es ist leider vorgesehen, dass alles ordnungsgemäss begradigt gezeichnet werden soll. *g*

pest
2008-04-02, 11:53:51
sollen die Pfeilspitzen denn an dem Kreisrand anliegen?

Monger
2008-04-02, 11:59:21
sollen die Pfeilspitzen denn an dem Kreisrand anliegen?
In so einem Fall würde ich dann ein arithmetische Verfahren vorschlagen, sprich: an dem einen Kreis anfangen zu zeichnen, und solange in die berechnete Richtung weiterzeichnen bis man auf den anderen Kreis stößt. Manchmal sind arithmetische Lösungen um Längen schneller und einfacher, als das ganze abstrakt auszurechnen.

Wenn nicht, dann musst du halt eine Parallelverschiebung für die Linie ausrechnen. Pythagoras hilft da weiter.

Trap
2008-04-02, 12:36:07
Du machst dir eine 90°-Rotationsmatrix und wendeste die auf den Differenzenvektor der Punkte an. Dann hast du einen orthogonalen Vektor. Normalisieren, Skalieren und auf die Startpunkte draufaddieren, fertig.

pest
2008-04-02, 12:43:31
Du machst dir eine 90°-Rotationsmatrix und wendeste die auf den Differenzenvektor der Punkte an. Dann hast du einen orthogonalen Vektor. Normalisieren, Skalieren und auf die Startpunkte draufaddieren, fertig.

für einen orthogonalen Vektor in der Ebene reicht es zwei Komponenten zu vertauschen und einen zu negieren

Actionhank
2008-04-02, 12:58:27
für einen orthogonalen Vektor in der Ebene reicht es zwei Komponenten zu vertauschen und einen zu negieren

was wohl beides im endeffekt das gleiche ist...
aber wo wir schonmal dabei sind, werfe ich noch das skalarprodukt ein.

Dr.Doom
2008-04-02, 13:00:39
Argh, ich glaube, dass ich nochmal in die siebte oder achte Klasse gehen sollte: die Begriffe habe ich alle schon einmal gehört, aber wie man das nun konkret am Beispiel ausrechnet, weiss ich nicht. *schande*

Naje, ich habe es mit allerlei haarsträubender Frikelei zu diesem Ergebnis gebracht:
http://mitglied.lycos.de/bratworscht/bilder/graph1.jpg

EDIT2: Es sind aber vmtl noch eine Menge Rundungsfehler o.ä. drin, weil manche Pfeile nicht genau an den Knoten reichen (siehe unten rechts bei Knoten 3).

Trap
2008-04-02, 13:00:41
für einen orthogonalen Vektor in der Ebene reicht es zwei Komponenten zu vertauschen und einen zu negieren
Etwas anderes hab ich ja auch nicht vorgeschlagen, ich hab es nur so formuliert, dass man sich Rotationsmatrizen und Matrizenmultiplikation wieder anguckt ;)