Laden...

Objekte als Pfad definieren

Erstellt von Jueb vor 13 Jahren Letzter Beitrag vor 13 Jahren 838 Views
J
Jueb Themenstarter:in
8 Beiträge seit 2009
vor 13 Jahren
Objekte als Pfad definieren

Hallo
Auf einer Karte mit Flüssen, Image mit fixen Massen, sollte der aktuelle Standort von Schiffen angezeigt werden. Von den Schiffen habe ich keine Koordinaten, nur die gefahrene Distanz.
Kann mit WPF dem Fluss nach ein Pfad gelegt werden den ich dann als Objekt verwenden kann um darauf ein Schiffsymbol auf der Position x (Länge) anzubringen? Oder gibt es eine andere Möglichkeit?

Danke für eure Hilfe.

297 Beiträge seit 2008
vor 13 Jahren

Den Fluss kannst du als Pfad definieren, ist aber nicht ganz so einfach. Die Länge des Pfades kann man sicher auch berechnen, aber eventuell wäre es einfacher, die gefahrenen Kilometer in Koordinaten umzurechnen, als das alles über den Pfad zu machen.

There are 10 kind of people, those who understand binary and those who don't.

L
862 Beiträge seit 2006
vor 13 Jahren

Anhand der gefahrenen Länge, des Pfades und des Startpunkts die aktuelle Position auszurechnen ist tatsächlich nicht ganz einfach. Dazu müsstest du deinen Pfad in die einzelnen Segmente unterteilen, und die Länge der Segmente vom Startpunkt aus durchlaufen bis du ein Segment findest auf dem das Schiff liegt. Anschließend müsstest du in diesem Segment noch die entsprechende Position bestimmen und mit den bereits durchlaufenen Pfaden verrechnen.

Das ist etwas kompliziert aber nicht unmöglich. Es funktioniert aber nur wenn du einen nicht geschlossenen Pfad hast, was wiederum bedeuten würde dass dein Fluss an allen Stellen gleich dick ist. Bei einem geschlossenen Pfad (zum anzeigen) könntest du allerdings einen Pfad zum ausrechnen der Fahrtroute erstellen. Das ist allerdings auch nicht ganz ohne.

Wenn ich mich recht erinnere gibt es allerdings in WPF eine Art PathAnimation. Damit könnte man (bei nicht geschlossenen Pfaden) ein Schiffs-Control entlang des Pfades animieren. Evtl. kannst du ja soetwas verwenden oder dir per .NET-Reflector die nötige Mathematik dafür besorgen.

J
Jueb Themenstarter:in
8 Beiträge seit 2009
vor 13 Jahren

Ok, ist wohl einfach ich reduziere mal meine Wünsche auf das reine Positionieren des Schiffes an einem bestimmten Punkt (gefahrende Länge). Wenn ich mit PathGeometry arbeite gibt es eine GetPointAtFractionLength() Methode welche den Punkt zurückgibt. Nur wie zeichne ich den Fluss nach? StreamGeometry (Freizeichnen) ist nicht möglich, vermutlich wegen der Berechnung, also innerhalb von PathGeometry Bezier anwenden. Nach dem Zeichnen eines Segments kann ich im Expression Blend aber dieses nicht weiter verändern. Oder gibt es da ein Tool was ich übersehen habe?


<PathGeometry x:Key="Seine">
<PathFigure StartPoint="20,20" IsClosed="False">
<BezierSegment Point1="150,20" Point2="50, 100" Point3="100,100"/>
</PathFigure>
</PathGeometry>

L
862 Beiträge seit 2006
vor 13 Jahren

Ich habe nur die Blend Version 2. Dort kann man auch keine fertigen Pfade mehr bearbeiten. Ein Tool womit das geht ist InkScape. Das macht allerdings SVG-Pfade die zuerst konvertiert werden müssen.

Eine bessere Lösung kann ich dir allerdings nicht anbieten.