Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
10
respuestas

Una manera diferente con aleatoridad dibujando circulos

Circulos aleatorios en tamaño y color

Use una funcion darNumAleatorio para dar un indice de una serie de colores y distinto tamaño, ambos con distintos rangos para dar una resultado interesante al dibujo de los circulos. Quisa a alguien le interese o le sirva la idea!

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas width="600" height="400"></canvas>
    <script>

        function darNumAleatorio(rango) {
            return Math.round(Math.random()* rango)
        }        

         function dibujarCirculo(evento) {//el "event" lo carga automaticamente el navegador, nosotros lo cargamos de esta manera en la variable "evento"
            var x = evento.pageX - pantalla.offsetLeft;//se carga en "var x" la coordenada del click en este caso
            var y = evento.pageY - pantalla.offsetTop;
            var colores = ["#00cb","#c00b","#0c0b","#c0cb","#000b","#cc0b", "#e45b", "#9b5b","#764b"]
            var indice = darNumAleatorio(colores.length);

            /*pageX y pageY cargan el valor de coordenada en pantalla completa, no solo de nuestro cambas.
            Para arreglar esto se le resta a evento.pageX pantalla.offsetLeft lo mismo para evento.pageY pero con su respectivo. Asi obtenemos realmente la coordenada de
            nuestro canvas*/

            pincel.fillStyle = colores[indice];
            pincel.beginPath();
            pincel.arc(x, y, darNumAleatorio(30), 0, 2*3.14)
            console.log(evento);
            pincel.fill();
            console.log(x + ", " + y);
        }

        var pantalla = document.querySelector("canvas");
        var pincel = pantalla.getContext("2d");

        pincel.fillStyle = "lightgray";
        pincel.fillRect(0,0,600,400);
        pincel.strokeStyle = "black"
        pincel.strokeRect(0,0,600,400);
        pantalla.onclick = dibujarCirculo;
    </script>
</body>
</html>

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

10 respuestas

Gracias por compatir.

hola leonardo espero que estés Muy bien, gracias por compartir tu código.

esta buenisimo!

Hola amigo, muy bueno tu código, pero tengo una duda, soy nuevo en esto de programar, entiendo la lógica de tu programa, si no me equivoco, esos cadenas de tu variable array son los códigos de colores RGB ¿verdad ?, lo que no entiendo bien, es como haces para que los círculos que dibujas tengan distintas opacidades, o eso es característicos de los códigos RGB que tengan distintas opacidades ?, también tengo dudas ya que como solo me limito a lo que explica el profe, veo que agregas muchas cosas en la parte del código HTML, etiquetas que no hemos visto, si tuvieras algún momento libre, te agradecería si me pudieras explicar.

edit: aparentemente las opacidades son propias del código de color, pero igual quisiera que me explicaras lo de la parte HTML

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

solución!

Johard Khalid como estas?

Las primeras etiquetas html que ves son las que me pone el editor de codigo (vscode) que uso al autocompletar, se ponen solas. Las dos etiquetas ademas del utf-8 sirven para ayudarte con el tema de la responsividad, es decir, la visualizacion de la pagina en distintos dispositivos. Estas etiquetas las logro autocompletar escribiendo "ht" en el editor, linea 1, y seleccionando html:5 en Visual Studio Code, que es como el Sublime pero tiene un par mas de cositas, creo. Pero podes prescindir perfectamente de estas que aun no enseñaron en el curso por ahora.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

La forma de marcar la opacidad de cada circulo es hacerlo con el mismo codigo de color hexagesimal. Hay dos formas, una de 3 digitos (#000 (cada 0 corresponde a red, green, blue) y otra de 6 digitos (#000000 ( cada dos digitos un canal de color)). En estos momentos uso solo el de 3 digitos (es mas corto y cumple). Pero vos veras 4 digitos por color en el código, el 4 digito que aparece es la opacidad que preguntas. Fijate que siempre es b, es fija. Pero si vos dibujas en canvas un circulo sobre otro circulo este valor se va sumando, el interprete ya lo hace asi por si solo.

Oh vale muchas gracias, entendí la mayoría de lo que has dicho, excepto la parte de la opacidad, entendí que el último dígito representa la opacidad, que que la dejaste en "b" siempre, por lo que entiendo que todas tienen la misma intensidad en la transparencia, lo que no entendí fue eso de que dices que se va sumando, que se suma ?, la opacidad ?, no capte bien, igual gracias por tomarte el tiempo de contestarme.

si vas dibujando un tras otro cada circulo, uno arriba del otro pareciera que la opacidad se va aumentando (cada vez menos transparente) en la interseccion, pero la opacidad es siempre b. Por ahi me enrredé demasiado en la explicacion

Ya ya entendí, bueno, gracias y suerte.

Está genial, gracias por compartirlo.

Fenomenal!!!!