Foros del Web » Programando para Internet » Javascript »

Canvas rotar dibujo sin movimiento

Estas en el tema de Canvas rotar dibujo sin movimiento en el foro de Javascript en Foros del Web. Hola tengo la siguiente función: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original pj. draw = function ( x , y , width , height , ...
  #1 (permalink)  
Antiguo 09/12/2013, 14:43
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Canvas rotar dibujo sin movimiento

Hola tengo la siguiente función:

Código Javascript:
Ver original
  1. pj.draw=function(x,y,width,height,rotate){
  2.     width=width||pj.width;
  3.     height=height||pj.height;
  4.     rotate=rotate||this.rotate;
  5.     c.save();
  6.     c.setTransform(1,0,0,1,0,0);
  7.     c.translate(x+.5*width,(y+height/2)+.5*height);
  8.     c.rotate(rotate*Math.PI/180);
  9.    
  10.     c.fillStyle=pj.color1;
  11.     c.fillRect(-.5*width,-.5*height,width,height/2);
  12.    
  13.     x-=x+width/2;
  14.     y-=y+height;
  15.  
  16.     c.fillStyle=pj.color2;
  17.     c.beginPath();
  18.         c.moveTo(x,y+height/2);
  19.         c.lineTo(x+width,y+height/2);
  20.         c.lineTo(x+width/2,y);
  21.         c.lineTo(x,y+height/2);
  22.     c.closePath();
  23.     c.fill();
  24.     c.restore();
  25. }

Los parámetros pueden ser cualquiera. El problema es que el objeto se dibujo bien pero al rotar cambia ligeramente su posición, como evitar esto?

Saludos
  #2 (permalink)  
Antiguo 09/12/2013, 15:00
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 11 meses
Puntos: 206
Respuesta: Canvas rotar dibujo sin movimiento

Se evita haciendo que el centro del objeto coincida con la coordenada 0,0 al hacer la translación del contexto; y haciendo que las instrucciones de dibujo posteriores actúen como si el centro estuviera en 0,0.
  #3 (permalink)  
Antiguo 09/12/2013, 15:34
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Canvas rotar dibujo sin movimiento

Cita:
Iniciado por marlanga Ver Mensaje
Se evita haciendo que el centro del objeto coincida con la coordenada 0,0 al hacer la translación del contexto; y haciendo que las instrucciones de dibujo posteriores actúen como si el centro estuviera en 0,0.
Lo he intentado hacer con c.translate(x+.5*width,(y+height/2)+.5*height);
y luego para facilitar el dibujo del objeto he restado a la x y a la y:
x-=x+width/2;
y-=y+height;

pero sigue igual...
En anteriores programas si lo conseguía pero parece que algún concepto se me ha olvidado.
  #4 (permalink)  
Antiguo 09/12/2013, 15:37
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 11 meses
Puntos: 206
Respuesta: Canvas rotar dibujo sin movimiento

No está bien. Coge una libreta de hojas cuadriculadas, dibuja un eje de coordenadas, dibuja un punto muy gordo donde debería estar el centro, y luego dibuja tu objeto. Es decir, ejecuta tú el código sobre una libreta,
No uses setTransform si no sabes exactamente lo que hace.

Etiquetas: canvas, dibujo, movimiento, rotar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:54.