Ich habe mehrere Spline2D-Objekte in meinem Code, von denen jedes über eine Positions-, Geschwindigkeits- und Beschleunigungsmethode verfügt, die zu einem bestimmten Zeitpunkt einen Vektor der angegebenen Menge zurückgibt. Ich habe diese Vektoren verwendet, um Geometrie zu konstruieren, um Gradientenstriche für die Kurven zu erstellen, aber ich habe Probleme mit Selbstschnittpunkten bei steilen Kurven. Als Beispiel ist hier eine Kurve, in der dies auftritt:
Drahtmodell: http://twitpic.com/2zplw1/full
Gefüllt: http://twitpic.com/2zpmnt/full
Wie Sie sehen können, schneidet sich in der zweiten Kurve der innere Teil selbst, was dieses hässliche Artefakt verursacht. Gibt es einen guten Algorithmus / eine gute Methode, um Kurven zu streichen, ohne diese Selbstüberschneidung zu verursachen?
EDIT : Extremere Beispiele sowie ein Modell dessen, was ich erreichen möchte:
Drahtmodell: http://twitpic.com/2ztwzi/full
Gefüllt: http://twitpic.com/2ztwkt/full
Ideales Ergebnis (Mock-Up): http://twitpic.com/2ztxa8/full
Antworten:
Wenn Sie diese mit der GPU und einer modernen 3D-API (z. B. OpenGL / D3D) rendern, scheint es mir, dass Sie dies mit Tiefenprüfungen beseitigen können. Wenn Sie Ihre äußeren Verts z = FAR und Ihre inneren Verts z = NEAR zuweisen, sollte die Tiefenprüfung verhindern, dass die Überlappung angezeigt wird. Mit OpenGL:
Vorsichtsmaßnahme: Dies funktioniert nicht, wenn Sie durchscheinende Striche benötigen.
quelle
Der "Fix" hängt davon ab, wie die resultierende Ausgabe aussehen soll. Das Problem ist hier nicht wirklich gut genug definiert: Wie soll es aussehen?
Ich würde vorschlagen, dass Sie zuerst versuchen, ein noch extremeres Beispiel für den Fehler zu machen, und dann Photoshop / Paint verwenden, um ihn zu beheben. Vielleicht finden Sie Inspiration für eine Lösung.
Willst du, dass es zusammenklappt? Überlappung mit der Kante? Ziehen, bis es sich nicht überlappt?
quelle