Cómo dibujar con canvas y ciclos -HTML5

En el ejercicio anterior, creamos un plano cartesiano (Como dibujar con canvas – Ejercicio 1). Ahora vamos a crear figuras en canvas, trazando lineas y mediante un ciclo para obtener el siguiente resultado.

resultado-final

5.Definiendo variables

cartesiano-areas

Necesito limitar el área de cada cuadrante en el canvas y el área total del mismo para poder delimitar el ciclo.
var area=150;

var area2=300;

Ahora debo definir la variable que contendrá el objeto que voy a usar en el html, que para este ejercicio practico sigue siendo ej1

var ej1;

Y el punto de partida que será (150,0)

var areaX=150;
var areaY=0;

Con los limites del canvas y el elemento que voy a afectar, necesito definir el espacio entre lineas para empezar a dibujar (Por defecto le pondré 2 pero ustedes lo pueden cambiar) y esta variable solo existirá para la función.

var constante=10;

6. Definiendo los trazos del primer cuadrante

1-cuadrante

Para definir los trazos del primer cuadrante y poder definir el punto de partida de mi ciclo, necesito identificar como va a variar la posición del lápiz y saber como se va a comportar el eje X y el eje Y cada vez que se ejecute el ciclo.

[lista]

  • El lápiz siempre se ubicará en la posición 150 de X y aumentará en el eje Y iniciando desde (150,0) y hasta llegar a (150,150)
  • El trazo se realizará disminuyendo en el eje X y aumentendo en el eje Y . (150,0) , (140,10), (130,10)

7.Creando el ciclo

Para ejecutar el ciclo creare una variable llamada c1 que aumentará +1 y no podrá ser mayor a 150 inicialmente.
Y dentro de este creare 2 variables más CoordY y CoordX, que serán quienes definan la posición y el trazo de la linea dentro del ciclo.

CoordX disminuye con el valor de la constante asi:

CoordX= areaX – constante en cada ciclo

CoordX= 150 – 10.

mientras que CoordY aumenta su valor cada vez que se ejecuta el ciclo

var ej1;
var area=150;
var area2=300;
var areaY=0;
var areaX=150;
var limite=150;
function ejercicio1(){
  ej1=document.getElementById("lienzo1");
  lienzo1=ej1.getContext("2d");
  constante=10;
    for(c1=0; c1<150; c1+constante)
    {
    c1=c1+constante;
        coordY= areaY=areaY+constante;
        coordX= areaX= areaX-constante;
        lienzo1.beginPath();
        lienzo1.moveTo(area,coordY);
        lienzo1.lineTo(coordX,area);
        lienzo1.stroke();
        lienzo1.closePath();
    }   
}

resultado1

8.Modificación del ciclo para crear el área 1 y 2 completa

Para crear el área 1 y 2 solo debemos modificar el área total del ciclo que pasará de 150 a 300 (limite total del canvas) y crear una condición para poder cambiar CoordX que ahora debe aumentar cuando el área sea mayor que 150.

var ej1;
var area=150;
var area2=300;
var areaY=0;
var areaX=150;
var limite=150;
function ejercicio1(){
  ej1=document.getElementById("lienzo1");
  lienzo1=ej1.getContext("2d");
  constante=10;
    for(c1=0; c1<area2; c1+constante)
    {
    c1=c1+constante;
      if(c1<=150)
      {
        coordY= areaY=areaY+constante;
        coordX= areaX= areaX-constante;
        lienzo1.beginPath();
        lienzo1.moveTo(area,coordY);
        lienzo1.lineTo(coordX,area);
        lienzo1.stroke();
        lienzo1.closePath();
      }else{
        coordY= areaY=areaY+constante;
        coordX= areaX= areaX+constante; //CoordX ahora aumenta
        lienzo1.beginPath();
        lienzo1.moveTo(coordY,area); //Se invierten las coordenadas con relación a la primera condición
        lienzo1.lineTo(area,coordX); //Se invierten las coordenadas con relación a la primera condición
        lienzo1.stroke();
        lienzo1.closePath();
      }
    }
 
}

resultado2

9.Áreas 3 y 4

Creo un nuevo ciclo que encargará de crear el área 3 – 4. Para esto defino una variable c2 y cambios los sinos en la variable de CoordX y CoordY, completando las 4 posiciones dentro de cada cuadrante.

var ej1;
var area=150;
var area2=300;
var areaY=0;
var areaX=150;
var limite=150;
function ejercicio1(){
  ej1=document.getElementById("lienzo1");
  lienzo1=ej1.getContext("2d");
  constante=10;
    for(c1=0; c1<;area2; c1+constante)
    {
    c1=c1+constante;
      if(c1<=150)
      {
        // área 1 (-,+)
                                coordY= areaY=areaY+constante;
        coordX= areaX= areaX-constante;
        lienzo1.beginPath();
        lienzo1.moveTo(area,coordY);
        lienzo1.lineTo(coordX,area);
        lienzo1.stroke();
        lienzo1.closePath();
      }else{
        // área 2 (+,+)
                                coordY= areaY=areaY+constante;
        coordX= areaX= areaX+constante;
        lienzo1.beginPath();
        lienzo1.moveTo(coordY,area);
        lienzo1.lineTo(area,coordX);
        lienzo1.stroke();
        lienzo1.closePath();
      }
    }
    for(c2=0; c2<area2; c2+distancia)
      {
        c2=c2+distancia;
        if(c2<=150)
        {
          // área 3 (+,-)
                                        coordY= areaY=areaY-distancia;
          coordX= areaX= areaX+distancia;
          lienzo1.beginPath();
          lienzo1.moveTo(area,coordY);
          lienzo1.lineTo(coordX,area);
        }else{
          // área 4 (-,-)
                                        coordY= areaY=areaY-distancia;
          coordX= areaX= areaX-distancia;
          lienzo1.beginPath();
          lienzo1.moveTo(coordY,area);
          lienzo1.lineTo(area,coordX);
        }
        lienzo1.stroke();
        lienzo1.closePath();
      }   
 
}

resultado-final

       
Haz clic aquí si quieres publicar un comentario para este post
Suscribirse
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comentarios
Inline Feedbacks
Ver todos los comentarios