Sono alle prime fasi di un progetto JS. Tutto sta andando bene finora tranne che per il posizionamento di una forma. La forma in questione è un diamante verde acqua (quadrato ruotato di 45 gradi). Posso ottenere il quadrato sullo schermo non è un problema, ma quando ho aggiungere:d3.js Comportamento anomalo rotazione
.attr("transform", "rotate(45)")
piazza ruota correttamente, ma si sposta verso la parte sinistra dello schermo, in questo modo:
Non sono sicuro di cosa stia causando questo. Se aiuta, qui è parte del codice che ha prodotto questo risultato:
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
svg
.append("rect")
.attr("transform", "rotate(45)")
.attr("x", 250)
.attr("height", w/10)
.attr("width", w/10)
.attr("fill", "teal")
Nota: Se metto la "y" attributo, la piazza scompare completamente.
Che cosa sta causando questo? Ho fatto qualcosa di sbagliato che non riesco a vedere?
Ahhh hai assolutamente ragione. Molte grazie. Quindi ora ho bisogno che la forma sia esattamente al centro.Usando il Teor di Pitagora, ho trovato la lunghezza della sezione trasversale e l'ho divisa per 2. Il risultato di questa equazione è ciò che voglio impostare come coordinata y nella mia dichiarazione di traslazione (sottratta dall'altezza della tela/2 ovviamente) . Sembra come se non posso usare le variabili qui però. Sai come potrei farlo? – 1080p
Non è necessario utilizzare Pythagorean, a condizione che la trasformazione avvenga nell'ordine corretto. Supponendo che 'w' e' h' siano le dimensioni del quadro, e 'rw' e' rh' sono le dimensioni di Rect, questo dovrebbe fare ciò che stai chiedendo: '.attr (" transform "," translate ("+ (w/2) + "," + (h/2) + ") ruota (45) translate (" + (-rw/2) + "," + (-rh/2) + ")" '. In altre parole , prima muovere in alto a sinistra del rect al centro, quindi ruotare 45, quindi tornare indietro a metà larghezza e a metà altezza di rect - lungo 45 gradi asse - che lo centra.Se il canvas è 300x300 e il rect è 100x100: ' "translate (150,150) ruotare (45) translate (-50, -50)" ' – meetamit
Interessante. Ho già installato Pythagorean nel mio codice, ma se il tuo metodo è più veloce, posso scambiarlo. Grazie mille per tutti aiuto – 1080p