2009-03-12 5 views
2

ein Weg, ausgedrückt als eine Reihe von 2D-Punkten Gegeben:Pfade zu Triangle Liste (.NET/C#)

Point[] path = new Point[4] 
{ 
    new Point(0,0), 
    new Point(10,0), 
    new Point(10,10), 
    new Point(0,10), 
}; 

... Hier eine Kiste.

Was ist der beste Weg, um dies in eine Liste von Dreiecken (die den Pfad füllen) zu konvertieren, die in einer 3D-Anwendung verwendet werden? Angesichts dessen, dass dies nur ein einfaches Beispiel ist und der Pfad in der Realität ziemlich komplex sein kann. Gibt es bereits etwas im Framework, vielleicht System.Drawing oder in WPF, was dabei helfen würde?

Edit: (Nach dem Kommentar von Samuel) Idealerweise I'l mit der Lage sein, wie sowohl konvexen und konkaven Polygone zu behandeln, sonst die Grafik wird manuell aus vielen konvexen Polygonen sein ..

+0

Ist der Pfad ein konvexes Polygon? Wenn es so einfach ist, wird es sonst ziemlich schwierig. – Samuel

+0

Im Idealfall würde ich gerne mit Konkav- und Konvex-Polygonen umgehen können. – Rob

+0

Rob, siehe meine Antwort unten. Es würde mit beiden umgehen, aber ein bisschen mehr Aufwand sein. Es erfordert jedoch besondere Sorgfalt (über die meisten einfachen Algorithmen hinaus), mit degenerierten Polygonen umzugehen. –

Antwort

5

Es hängt davon ab, woraus der Pfad besteht und wie er erstellt wird.

Wenn es immer ein konvexes Polygon ist, können Sie sehr einfach einen Dreiecksfächer erstellen, der die Region ausfüllt.

Wenn es sich nicht um ein konvexes Polygon handelt, müssen Sie höchstwahrscheinlich eine Form der Triangulation verwenden, um den Pfad zu füllen. Es gibt ziemlich viele Möglichkeiten da draußen. Die meisten der Beispielcode ist in C oder C++, nicht in C#, aber dies könnte helfen:

http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/morten.html

Die Grundidee ist in den äußeren Grenzen zu füllen, und die Triangulation Routine wird die richtige Dreieck passieren zurück Indizes für Ihre 3D-App erforderlich.

Es gibt nichts im Rahmen, das dies für Sie tun würde.