Ich versuche SVG-Pfadberechnungen in Python zu implementieren, aber ich habe Probleme mit Arc-Kurven.
Ich denke, das Problem liegt in der Konvertierung von der Endpunkt- zur Zentralparametrierung, aber ich kann das Problem nicht finden. Sie finden Hinweise zur Implementierung in Abschnitt F6.5 der SVG-Spezifikationen . Ich habe mir Implementierungen in anderen Sprachen angeschaut und kann auch nicht sehen, was sie anders machen.
Meine Arc-Objekt-Implementierung ist hier:
%Vor%Sie können dies mit dem folgenden Code testen, der die Kurven mit dem Turtle-Modul zeichnet. (Der raw_input () am Ende dient nur dazu, dass der Bildschirm beim Beenden des Programms nicht verschwindet).
%Vor%Das Problem:
Jeder dieser vier gezeichneten Bögen sollte vom Startpunkt zum Endpunkt ziehen. Sie werden jedoch aus den falschen Punkten gezogen. Zwei Kurven gehen von Ende zu Anfang, und zwei gehen von 100, -50 bis 0,0 statt von 0,0 bis 100, 50.
Ein Teil des Problems besteht darin, dass die Implementierungshinweise Ihnen die Formel geben, wie die Endpunkte des Konvertierungsformulars in die Mitte gebracht werden, aber nicht, was es geometrisch macht, also bin ich nicht ganz klar, was jeder Schritt tut. Eine Erklärung dazu wäre auch hilfreich.
Ich glaube, ich habe einige Fehler in Ihrem Code gefunden:
%Vor% Die Bedingung uy > 0
ist falsch, richtig ist uy < 0
(der gerichtete Winkel von (1, 0)
bis (ux, uy)
ist negativ, wenn uy < 0
):
Dann
%Vor% Die Unterscheidung ist hier nicht notwendig, die Parameter sweep
und arc
sind bereits in theta
und delta
berücksichtigt. Dies kann vereinfacht werden zu:
Und schließlich
%Vor% Hier sind sin
und cos
durcheinander, korrekt ist
Nach diesen Änderungen wird das Programm wie erwartet ausgeführt.
BEARBEITEN: Es gibt ein weiteres Problem. Die point
-Methode berücksichtigt keinen möglichen rotation
-Parameter. Die folgende Version sollte korrekt sein:
(Siehe Formel F.6.3.1 in der SVG-Spezifikation .)
Tags und Links python math svg geometric-arc