Foros del Web » Programando para Internet » Javascript »

Rotar imagen desde un punto

Estas en el tema de Rotar imagen desde un punto en el foro de Javascript en Foros del Web. Hola, estoy interesado en crear como un marcador de velecidad para un coche. De fondo sale el circulo de las velocidades, y en otra capa ...
  #1 (permalink)  
Antiguo 10/06/2009, 03:32
 
Fecha de Ingreso: septiembre-2007
Mensajes: 59
Antigüedad: 16 años, 7 meses
Puntos: 0
Rotar imagen desde un punto

Hola, estoy interesado en crear como un marcador de velecidad para un coche.

De fondo sale el circulo de las velocidades, y en otra capa por encima la aguja que indica la velocidad. (Creo que con esto os haceis una idea)

Luego desde una pagina con un form le envio un dato que es la velocidad y lo recoge en la pagina siguiente (donde sale el velocimetro).

Ahora lo que me gustaria saber es si eciste algun script parecido (para no hacerlo de 0) o si no alguna pistilla de como hacer rotar una imagen en javascript desde un punto fijo.

Un saludo y gracias de antemano
  #2 (permalink)  
Antiguo 10/06/2009, 04:43
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Rotar imagen desde un punto

Fijate en estos enlaces:
http://www.disegnocentell.com.ar/notas2.php?id=201
http://www.disegnocentell.com.ar/notas2.php?id=204
  #3 (permalink)  
Antiguo 10/06/2009, 07:58
 
Fecha de Ingreso: septiembre-2007
Mensajes: 59
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Rotar imagen desde un punto

Hola, muchas gracias por la respuesta la verdad es que me ha sido muy util. Este codigo usando canvas te lo hace solo:

Código HTML:
<script>
function rotar(obj,angulo){
    if (angulo >= 0) {
        var rotation = Math.PI * angulo / 180;
    } else {
        var rotation = Math.PI * (360+angulo) / 180;
    }
    var costheta = Math.cos(rotation);
    var sintheta = Math.sin(rotation);
    if (document.createElement("canvas").getContext) {
    /* ---- canvas ---- */ 
        var c=document.createElement('canvas');
        c.width = Math.abs(costheta*obj.width) + Math.abs(sintheta*obj.height);
        c.style.width = c.width+'px';
        c.height = Math.abs(costheta*obj.height) + Math.abs(sintheta*obj.width);
        c.style.height=c.height+'px';
        c.id=obj.id;
        c.style.position='absolute';
        var ctx=c.getContext('2d');
        ctx.save();
        if (rotation <= Math.PI/2) {
            ctx.translate(sintheta*obj.height,0);
        } else if (rotation <= Math.PI) {
            ctx.translate(c.width,-costheta*obj.height);
        } else if (rotation <= 1.5*Math.PI) {
            ctx.translate(-costheta*obj.width,c.height);
        } else {
            ctx.translate(0,-sintheta*obj.width);
        }
        ctx.rotate(rotation);
        ctx.drawImage(obj, 0, 0, obj.width, obj.height);
        obj.parentNode.replaceChild(c,obj);
        ctx.restore();
    }else{
    /* ---- DXImageTransform ---- */
        obj.style.position='absolute';
        obj.style.filter="progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand')";
        obj.filters.item(0).M11 = costheta;
        obj.filters.item(0).M12 = -sintheta;
        obj.filters.item(0).M21 = sintheta;
        obj.filters.item(0).M22 = costheta;
    }
}
window.onload=function(){
    rotar(document.getElementById('pp'),22);
    
}
</script> 

El problema es que gira la imagen desde el centro. Se puede hacer que la imagen gire desde un punto concreto dandole coordenadas o algo asi? Al ser una aguja, siempre me interesaria que rotara desde la base de la misma (como si fuera un reloj)
  #4 (permalink)  
Antiguo 10/06/2009, 08:18
Avatar de TIaGoX  
Fecha de Ingreso: julio-2008
Ubicación: Loma Hermosa @ Buenos Aires
Mensajes: 49
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Rotar imagen desde un punto

Mira yo en base a ese código que pusiste una vez desarrolle unos relojitos similares a lo que necesitas. Y cree este método para transladar la imagen una vez rotada. Pensá que esta hecho como el método de una clase, por el nombre de las variable estimo que te darás cuenta de lo que son cada una de las mismas.
Código javascript:
Ver original
  1. /** El centro de rotación de canvas es el vértice superior izquierdo, por
  2.  * ello, este método se ocupa de calcular cuando debemos trasladar la
  3.  * imagen para que parezca que rota sobre el centro de la imagen.
  4.  * @param ctx, el objeto context.
  5.  * @param rotacion, el ángulo de rotación de la imagen en radianes.
  6.  */
  7. Meter.prototype.getTranslateAfterRotate = function(ctx,rotacion){
  8.     /* En base al angulo de rotación muevo la imagen a una nueva posicion
  9.      * dentro del lienzo para que quede centrada al momento de ser dibujada.
  10.      */
  11.     var hipotenusa = sqrt(pow2(this.meterWidth/2) + pow2(this.meterHeight/2));
  12.     var desplazamientoX;
  13.     var desplazamientoY;
  14.     /* Si el angulo esta en el primer cuadrante de la rotacion, tomamos el
  15.      * desplazamiento del centro por medio de la hipotenusa que es la semi
  16.      * diagonal de la imagen y el angulo de rotacion mas los 45º de angulo de
  17.      * la diagonal. Lo mismo con los demas cuadrantes. Para mas informacion
  18.      * de como interpretar esto se adjuntara la documentacion correspondiente.
  19.      */
  20.     if (rotacion <= PI/2) {
  21.         desplazamientoX = hipotenusa * coseno(rotacion+(PI/4));
  22.         desplazamientoY = hipotenusa * seno(rotacion+(PI/4));
  23.         ctx.translate(((this.meterWidth/2)-desplazamientoX)+xCentro,
  24.             ((this.meterHeight/2)-desplazamientoY)+yCentro);
  25.     } else if (rotacion <= PI) {
  26.         desplazamientoX = hipotenusa * seno(rotacion-(PI/4));
  27.         desplazamientoY = hipotenusa * coseno(rotacion-(PI/4));
  28.         ctx.translate(((this.meterWidth/2)+desplazamientoX)+xCentro,
  29.             ((this.meterHeight/2)-desplazamientoY)+yCentro);
  30.     } else if (rotacion <= 1.5 * PI) {
  31.         desplazamientoX = hipotenusa * (coseno(rotacion-(0.75 * PI)));
  32.         desplazamientoY = hipotenusa * (seno(rotacion-(0.75 * PI)));
  33.         ctx.translate(((this.meterWidth/2)+desplazamientoX)+xCentro,
  34.             ((this.meterHeight/2)+desplazamientoY)+yCentro);
  35.     } else {
  36.         desplazamientoX = hipotenusa * (coseno((1.75 * PI)-rotacion));
  37.         desplazamientoY = hipotenusa * (seno((1.75 * PI)-rotacion));
  38.         ctx.translate(((this.meterWidth/2)-desplazamientoX)+xCentro,
  39.             ((this.meterHeight/2)+desplazamientoY)+yCentro);
  40.     }
  41.     return ctx;
  42. }
Espero que se entienda y te sirva. Cualquier cosa trato de responder tus consultas.

Saludos!
  #5 (permalink)  
Antiguo 10/06/2009, 08:44
 
Fecha de Ingreso: septiembre-2007
Mensajes: 59
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Rotar imagen desde un punto

Muchas gracias por la respuesta, la verdad es que yo soy de php, html, css... y el javascript se me escapa un poco. Entiendo bien el codigo, aunque no consigo ubicarlo con mi codigo anterior. De todas formas voy a seguir investigando lo que me has puesto, a ver si lo consigo. Muchas gracias de nuevo por la informacion
  #6 (permalink)  
Antiguo 10/06/2009, 09:05
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Rotar imagen desde un punto

Hola:

Con una librería propia puedes ver esta página: Página hecha sin Flash... la presenté en estos foros hace unos pocos años... y la librería la puedes bajar desde este enlace: libgraf.js

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 11/06/2009, 04:11
 
Fecha de Ingreso: septiembre-2007
Mensajes: 59
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Rotar imagen desde un punto

Muchas gracias tambien por la informacion. Al final he encontrado una cosa bastante util. Que de momento me esta funcionando. Podeis ver el ejemplo aqui:

avesdepaso. com /adicae /Reloj /index .php (quitar los espacios)

Introducir un valor de 1 a 180 (que son los grados que gira) y en el reloj pasar el raton por encima para que se mueva la aguja los grados que le envias.

Ahora bien, tengo un problema mas (al final al usar jquery se me complica un poco mas)

Código:
{"mouseover":function(){rot[0].rotateAnimation(<?php print_r($_POST['reloj']); ?>);}},
Esto de aqui es lo que me calcula los grados, y la funcion que le hace arrancar al script, en este caso el mouseover. Pero prueno a ponerle load, onload, etc... y no consigo que se carge automaticamente al cargar la pagina... alguien sabe si tengo que especificarle algo diferente. Creo que igual deberia probar con document ready pero he probado y o no lo pongo ben o no lo localizo
  #8 (permalink)  
Antiguo 11/06/2009, 07:36
 
Fecha de Ingreso: septiembre-2007
Mensajes: 59
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Rotar imagen desde un punto

Hola, perdon por las molestias, me gustaria hacer una ultima consulta: Para que al pulsa la imagen esta rote 5 grados a un lado, tengo este codigo que pongo a continuacion y que funciona correctamente:

Código:
<div id="reloj"><img id="image3" src="img/p-aguja2.png"><div id="numeros"></div></div>
<script type="text/javascript">
			var pepito=0;
		$(document).ready(function(colocar)
		{
			var rot=$('#image3').rotate({maxAngle:180,minAngle:0,
			bind:
				[
					{"click":function(){pepito=pepito+5;rot[0].rotateAnimation(pepito);}}
				]
			});
			
		});
</script>
<a href="#">Menosss!!!!</a> - <a href="#" >Massss!!!!!</a>
Mi duda es:

En los enlaces del final, como puedo decirle al de "Mass!!!" que me ejecute la parte de +5?

Gracias
  #9 (permalink)  
Antiguo 12/06/2009, 03:43
 
Fecha de Ingreso: septiembre-2007
Mensajes: 59
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Rotar imagen desde un punto

Subo esto con nuevo codigo, que se me esta atrancando y la verdad es que no se como salir de el. Lo explico, tengo este codigo:

Código:
<div id="reloj"><img id="image3" src="img/p-aguja2.png"></div>
<script type="text/javascript">

		var pepito=0;
		
			var rot=$('#image3').rotate({maxAngle:180,minAngle:0,
			bind:
				[
					{"click":function click(){rot[0].rotateAnimation(120);}}
				]
			});	
</script>
<input type="button" name="poten" Value="Calcular potencia">
Esto lo que me hace es la imagen con id 3 al pinchar me hace una accion. Lo que quiero es como decirle al input con un onclick o asi, que me ejecute la accion y que no lo haga la imagen. ALguien podria ayudarme please?
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 15:16.