Foros del Web » Creando para Internet » HTML »

Dibujar circunferencia sin usar "arc()"

Estas en el tema de Dibujar circunferencia sin usar "arc()" en el foro de HTML en Foros del Web. Hola que tal, Me gustaria saber como dibujar una circunferencia sin usar el metodo arc() del contexto, es decir, dibujarlo por medio de lineas o ...
  #1 (permalink)  
Antiguo 11/04/2012, 13:41
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 13 años, 4 meses
Puntos: 32
Dibujar circunferencia sin usar "arc()"

Hola que tal,

Me gustaria saber como dibujar una circunferencia sin usar el metodo arc() del contexto, es decir, dibujarlo por medio de lineas o puntos con el fin que se valla viendo como se va cerrando en un intervalo de tiempo.

Supongo que se tendra que usar algo del PI, Coseno y Seno pero estoy muy limitado para entender eso jeje.

Crei que restandole y sumandole al X y Y hasta llegar al centro mas o menos el radio, dependiendo del lado donde empieza dibujar, podria hacer un circulo, pero lo unico que logre fue hacer un romboide XD.

Gracias y saludos.

Última edición por IXtremeLT; 11/04/2012 a las 13:47
  #2 (permalink)  
Antiguo 11/04/2012, 17:32
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, 5 meses
Puntos: 834
Respuesta: Dibujar circunferencia sin usar "arc()"

Consiste en colocarle a un punto un posicionamiento x igual al coseno de un ángulo, un posicionamiento y igual al seno de ese ángulo e ir incrementando el ángulo (o de crementándolo) en cada fotograma. Tanto al seno como al coseno, que equivalen a un radiovector de valor 1, hay que multiplicarlos por un radio cualquiera para que el círculo sea visible:
Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title></title>
</
head>
<
body>
<
div id="log">...</div>
<
canvas width="500" height="500" id="pp" style="border:1px solid red" />
<
script>
    var 
ctx=document.getElementById('pp').getContext('2d');
    var 
r=100;
    
ctx.strokeStyle 'red';  
      
ctx.beginPath();  
      
ctx.moveTo(350250); 
    var 
ang=0,i,x,y;
    
i=setInterval(
                  function(){
                          if(
ang>2*Math.PI){clearInterval(i);return;}
                          
ang+=.01;
                          
document.getElementById('log').innerHTML=ang;
                        
x=(Math.cos(ang)*r)+(250);
                        
y=(Math.sin(ang)*r)+(250);
                        
ctx.lineTo(xy);  ctx.stroke();                
                 },
                 
30
    
);
     
ctx.closePath(); 
</script>
</body>
</html> 
Si en lugar de multiplicar seno y coseno por el mismo valor los multiplicamos por valores diferentes, en lugar de círculos obtenemos elipses (o círculos en perspectiva si hablamos de 3D):

Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title></title>
</
head>
<
body>
<
div id="log">...</div>
<
canvas width="500" height="500" id="pp" style="border:1px solid red" />
<
script>
    var 
ctx=document.getElementById('pp').getContext('2d');
    var 
r=100;
    
ctx.strokeStyle 'red';  
      
ctx.beginPath();  
      
ctx.moveTo(350250); 
    var 
ang=0,i,x,y;
    
i=setInterval(
                  function(){
                          if(
ang>2*Math.PI){clearInterval(i);return;}
                          
ang+=.01;
                          
document.getElementById('log').innerHTML=ang;
                        
x=(Math.cos(ang)*r)+(250);
                        
y=(Math.sin(ang)*r/2)+(250);//ELIPSE
                        
ctx.lineTo(xy);  ctx.stroke();                
                 },
                 
30
    
);
     
ctx.closePath(); 
</script>
</body>
</html> 
Un link muy bueno:
http://www.sargentoweb.com/as2/?doc=2

Última edición por Panino5001; 11/04/2012 a las 17:47
  #3 (permalink)  
Antiguo 13/04/2012, 14:08
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 8 meses
Puntos: 142
Respuesta: Dibujar circunferencia sin usar "arc()"

Cita:
Iniciado por IXtremeLT Ver Mensaje
...con el fin que se valla viendo como se va cerrando en un intervalo de tiempo.
Si esto es lo que deseas, ¿No sería más fácil usar una variable que se sume hasta 360 con un setInterval, y usar esa variable para dibujar el arc()?
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #4 (permalink)  
Antiguo 13/04/2012, 15:17
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, 5 meses
Puntos: 834
Respuesta: Dibujar circunferencia sin usar "arc()"

Cita:
Iniciado por daPhyre Ver Mensaje
Si esto es lo que deseas, ¿No sería más fácil usar una variable que se sume hasta 360 con un setInterval, y usar esa variable para dibujar el arc()?

Me pregunté lo mismo, pero como IXtremeLT andaba con ganas de aprender algo de Trigonometría. Y de paso, con el link aprende sobre movimiento ondulatorio (como el de los famosos copos de nieve cayendo), un poco de falso 3d o puede seguir experimentando para hacer otras cosas divertidas:
Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title></title>
</
head>
<
body>
<
div id="log">...</div>
<
canvas width="500" height="500" id="pp" style="border:1px solid red" />
<
script>
    var 
ctx=document.getElementById('pp').getContext('2d');
    var 
r=0;
    
ctx.strokeStyle 'red';  
      
ctx.beginPath();  
      
ctx.moveTo(250250); 
    var 
ang=0,i,x,y;
    
i=setInterval(
                  function(){
                          if(
r>300){clearInterval(i);return;}
                          
ang+=.01;
                          
r+=.1;
                          
document.getElementById('log').innerHTML=ang;
                        
x=(Math.cos(ang)*r)+(250);
                        
y=(Math.sin(ang)*r)+(250);
                        
ctx.lineTo(xy);  ctx.stroke();                
                 },
                 
30
    
);
     
ctx.closePath(); 
</script>
</body>
</html> 
  #5 (permalink)  
Antiguo 17/04/2012, 23:10
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 13 años, 4 meses
Puntos: 32
Respuesta: Dibujar circunferencia sin usar "arc()"

Haha muchas gracias a ustedes =), es increible lo que puedes hacer sabiendo programacion y matematicas, ahora ya me imagino aplicando la fisica, de hecho ya he visto ejemplos increiblemente magnificos con html5, como una cortina en 3d que se mueve si la empujas como en la realidad y pelotas que rebotan de verdad jaja. Voy a ver ese link para entender mejor el funcionamiento del seno y coseno, es que siempre fui bien burro para echarle ganas cuando me dieron clases en la escuela pero ya tengo como casi 2 años que le ando dando caña a varias ciencias principalmente a la programacion web, ahora que entre a la Uni, si que le
echare ganas a las mates y fisica lo de programacion lo aprendo mas facil aqui en internet y con ustedes, graciad y hasta la proxima :D.

Etiquetas: dibujar, usar
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 19:45.