Estoy en las primeras etapas de un proyecto de JS. Todo va bien hasta el momento, excepto por el posicionamiento de una forma. La forma en cuestión es un diamante verde azulado (cuadrado rotado 45 grados). Puedo conseguir la plaza en la pantalla sin ningún problema, pero cuando agrego:d3.js Odd Rotation Behavior
.attr("transform", "rotate(45)")
la plaza gira correctamente, pero se desplaza hacia la parte izquierda de la pantalla, así:
No estoy seguro de qué está causando esto. Si ayuda, aquí es una parte del código que produce este resultado:
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: Si pongo la "y" atributo en la plaza desaparece por completo.
¿Qué está causando esto? ¿Hice algo mal que simplemente no puedo ver?
Ahhh usted tiene toda la razón. Muchas gracias. Entonces ahora necesito que la forma esté exactamente en el centro.Utilizando la Teoría de Pitágoras, encontré la longitud de la sección transversal y la dividí por 2. El resultado de esa ecuación es lo que quiero establecer como la coordenada y en mi declaración de traducción (resta del alto de la lona/2 por supuesto) . Aunque parece que no puedo usar variables aquí. ¿Sabes cómo podría hacer eso? – 1080p
No es necesario utilizar Pythagorean, siempre que realice la transformación en el orden correcto. Suponiendo que 'w' y' h' son el tamaño del lienzo, y 'rw' y' rh' son el tamaño del Rect, esto debería hacer lo que estás pidiendo: '.attr (" transform "," translate ("+ (w)/2) + "," + (h/2) + ") rotar (45) traducir (" + (-rw/2) + "," + (-rh/2) + ")" 'En otras palabras , primero mueva la parte superior izquierda de rect hacia el centro, luego gire 45, luego retroceda medio ancho y medio alto de rect - a lo largo de 45 grados eje - que lo centra. Si lienzo es 300x300 y rect es 100x100: ' "translate (150,150) rotate (45) translate (-50, -50)" ' – meetamit
Interesante. Ya configuré el Pythagorean en mi código, pero si tu método es más rápido, puedo cambiarlo. Muchas gracias por todo ayuda. – 1080p