d3.js Ungeradzahliges Rotationsverhalten

8

Ich bin in einem frühen Stadium eines JS-Projekts. Alles läuft gut bis auf die Positionierung einer Form. Die fragliche Form ist ein teal Diamant (Quadrat um 45 Grad gedreht). Ich kann das Quadrat auf dem Bildschirm kein Problem, aber wenn ich hinzufügen:

%Vor%

Das Quadrat rotiert richtig, verschiebt sich jedoch in Richtung des linken Teils des Bildschirms:

Ich bin mir nicht sicher, was das verursacht. Wenn es hilft, hier ist ein Teil des Codes, der dieses Ergebnis produziert:

%Vor%

Hinweis: Wenn ich das Attribut "y" einfüge, verschwindet das Quadrat vollständig.

Was verursacht das? Habe ich etwas falsch gemacht, dass ich einfach nicht sehen kann?

    
1080p 11.06.2012, 17:52
quelle

3 Antworten

15

Wenn Sie das Rechteck drehen, drehen Sie auch das Koordinatensystem. Wenn Sie es später 250 entlang der X-Achse bewegen, bewegen Sie es tatsächlich 250 Einheiten entlang einer 45-Grad-Achse - das Ergebnis der Drehung.

Wenn Sie ein transform -Attribut einführen, wie Sie es für rotate getan haben, sollten Sie die gesamte Transformation über dieses Attribut durchführen. Daher müssen Sie translate anstelle des Attributs "x" verwenden. Dann würde es so aussehen:

%Vor%

Das bringt Ihnen die Ergebnisse, die Sie suchen. Beachten Sie, dass die Reihenfolge der Transformationen hier von Bedeutung ist: Wenn Ihre Transformation "rotate(45) translate(250, 0)" war (d. H. Zuerst rotieren und dann übersetzen), erhalten Sie die gleichen, falschen Ergebnisse, die Sie zuvor erhalten haben. Das liegt daran, dass beim ersten Drehen die Übersetzung wie zuvor entlang einer gedrehten X-Achse erfolgt.

    
meetamit 11.06.2012, 18:24
quelle
11

In SVG müssen Sie den Transformationsursprung so einstellen, dass er sich von der Mitte aus dreht, z. B. ...

%Vor%

Dabei ist 250, 100 die x- und y-Position Ihres rect minus seines Radius. Alles zusammen würde es aussehen wie ...

%Vor%

Sie können eine Demo hier anzeigen:

Ссылка

    
Duopixel 11.06.2012 18:35
quelle
0

Hier ist ein Ansatz, der sich etwas von der Antwort unterscheidet, die Duopixel gegeben hat. Hier wiederholen Sie nicht die Berechnungen für X und Y. In Duopixels Beispiel ist das eine triviale Verbesserung, da er lediglich auf eine Struktur verweist. Es ist oft der Fall, dass X und Y Funktionen sind und ich möchte das Logging nicht an zwei Stellen beibehalten. Mit dieser Methode können Sie X und Y als Knoten definieren und dann in der Mitte des Knotens rotieren.

Sie können feststellen, dass Sie nach der Drehung immer noch die endgültige Position optimieren möchten, was mit einer anderen Transformation möglich ist, oder im Fall von TEXT können Sie dx, dy.

verwenden %Vor%     
greg 21.05.2014 17:29
quelle

Tags und Links