Radiales Baumdiagramm-Layout: Korrektur von Beizer-Kurven

8

Ich möchte einen schönen radialen Baumentwurf machen und bin ein wenig mit gekrümmten Kanten gestolpert. Das Problem ist, dass bei unterschiedlichen Winkeln zwischen Quell- und Zielpunkten die Kanten unterschiedlich gezeichnet werden. Die bereitgestellten Bilder stammen aus dem einzelnen Diagramm, sodass Sie sehen können, wie sie sich für die verschiedenen Kantenrichtungen unterscheiden. Ich denke, der Punkt liegt in der Generierung der Kontrollpunkte der Beizer-Kurve und ich kann einfach nicht verstehen, wie man sie repariert.

Ich möchte, dass sie auf die gleiche Weise gezeichnet werden, egal in welcher Richtung die Kante ist.

Wie kann ich das wie in Pic1 erreichen? Wie kann ich das wie in Pic2 erreichen?

Wie hier: Ссылка

Danke!

Code:

%Vor%

UPDATE 1: Ich habe den Winkel zwischen vorherigem Eckpunkt und Quelle im Bogenmaß mit der folgenden Formel: Math.Atan2 (prev.Y - source.Y, source.X - prev.X); Aber trotzdem bekomme ich die Kanten wie in Pic.4.

UPDATE 2 Die vorherige Vertexposition für branchAngle ist ungenau. Daher entschied ich mich für einen Durchschnittswinkel zwischen allen Kanten in einer Verzweigung als branchAngle . Dieser Ansatz schlägt fehl, wenn die Kanten aus einer Brach-Position um die 180-Grad-Marke liegen und die Verzweigung Kantenwinkel wie 175, 176 .. -176 haben kann !! Ich benutze diesen Code, um sie alle positiv zu machen:

%Vor%

Aber jetzt können die Winkel 350, 359 .. 2 sein !!! Ziemlich schwierig, einen Durchschnitt zu berechnen :) Kannst du mir bitte raten, wie ich das umgehen kann?

Bild1

Bild2

Bild3

Bild4

    
Alexander Smirnov 21.08.2016, 09:51
quelle

1 Antwort

1

Wenn Sie den Graphen aus dem Link betrachten, den Sie angegeben haben, hat jeder Zweig im Baum seinen eigenen Winkel, mit dem die Kontrollpunkte des Zweigs deklariert werden. Diese branchAngle ist die gleiche wie die des Vektors, der vom ersten Knoten zum vorherigen geht (jeder Zweig kann wiederum mehrere Zweige erzeugen). Der Winkel des ersten Zweigs (erster Knoten = vorhergehender Knoten = Mitte) scheint um -60 ° zu liegen.

Die Einstellung der Art der Kurve kann durch Kompensieren dieses Verzweigungswinkels (0 °, -90 °, -180 °, ...) für alle Zweige im Baum erfolgen. Ergebnis in controlAngle , das für die Festlegung der Kontrollpunkte verwendet wurde.

Erzeugen der Kontrollpunkte unter Berücksichtigung der Winkel:

%Vor%

Schnellüberprüfung branchAngle = 30 ° & amp; Kompensation = -90 ° - & gt; controlAngle = -60 °

    
Funk 24.08.2016, 14:04
quelle

Tags und Links