2
respostas

[Dúvida] Esquadro

Não consegui entender o código que desenha o esquadro:

<canvas width="600" height="400"></canvas>
<script>
  var tela = document.querySelector('canvas');
  var pincel = tela.getContext('2d');

  function desenhaEsquadro(xa, ya, xc, yc, cor) {
    pincel.fillStyle = cor
    pincel.beginPath();
    pincel.moveTo(xa, ya);
    pincel.lineTo(xa, yc);
    pincel.lineTo(xc, yc);
    pincel.fill();
    pincel.fillStyle = 'white'
    pincel.beginPath();
    pincel.moveTo((6 * xa + xc) / 7, (9 * ya + 5 * yc) / 14);
    pincel.lineTo((6 * xa + xc) / 7, (ya + 6 * yc) / 7);
    pincel.lineTo((5 * xa + 9 * xc) / 14, (ya + 6 * yc) / 7);
    pincel.fill();
  }
  desenhaEsquadro(50, 50, 400, 400, 'black');
</script>
2 respostas

Oi Pedro, tudo bem?

Vou tentar dividir o código em várias partes para te explicar com detalhes, tudo bem? Desculpe se ficar muito extenso.

  1. Primeiro, temos o elemento <canvas> com os atributos width e height definidos como 600 e 400, respectivamente. Esses valores determinam as dimensões da área de desenho do canvas em pixels.

  2. Em seguida, o código JavaScript começa, onde ele seleciona o elemento <canvas> usando document.querySelector('canvas') e armazena-o na variável tela.

  3. O próximo passo é obter o contexto de desenho 2D do canvas usando getContext('2d') e armazená-lo na variável pincel. O contexto 2D é a ferramenta que permite desenhar no canvas.

  4. Em seguida, temos a definição da função desenhaEsquadro, que recebe cinco parâmetros: xa, ya, xc, yc e cor. Esses parâmetros representam as coordenadas dos pontos do esquadro e a cor de preenchimento.

  5. Dentro da função desenhaEsquadro, a cor de preenchimento do pincel é definida usando pincel.fillStyle = cor. Isso define a cor que será usada para preencher as formas desenhadas.

  6. Em seguida, chamamos pincel.beginPath() para começar um novo caminho de desenho. Isso indica que vamos começar a definir um novo conjunto de formas.

  7. pincel.moveTo(xa, ya) move o pincel para a posição (xa, ya), que é o ponto de partida do esquadro.

  8. pincel.lineTo(xa, yc) desenha uma linha reta do ponto de partida até a posição (xa, yc).

  9. pincel.lineTo(xc, yc) desenha outra linha reta do ponto anterior até a posição (xc, yc), completando o contorno do esquadro.

  10. pincel.fill() preenche a forma definida com a cor especificada anteriormente.

  11. Em seguida, definimos a cor de preenchimento do pincel como 'white' usando pincel.fillStyle = 'white'. Isso será usado para desenhar um triângulo branco dentro do esquadro.

  12. Novamente, chamamos pincel.beginPath() para começar um novo caminho de desenho.

  13. pincel.moveTo((6 * xa + xc) / 7, (9 * ya + 5 * yc) / 14) move o pincel para a posição inicial do triângulo.

  14. pincel.lineTo((6 * xa + xc) / 7, (ya + 6 * yc) / 7) desenha uma linha reta do ponto de partida até a posição final do triângulo.

  15. pincel.lineTo((5 * xa + 9 * xc) / 14, (ya + 6 * yc) / 7) desenha outra linha reta do ponto anterior até a posição final do triângulo, completando o contorno do triângulo.

  16. pincel.fill() preenche o triângulo com a cor especificada anteriormente.

  17. Por fim, fora da função desenhaEsquadro, chamamos a função desenhaEsquadro com os argumentos 50, 50, 400, 400, 'black'. Isso desenha um esquadro preto na tela, com as coordenadas (50, 50) e (400, 400) e cor de preenchimento preta.

Então, o código usa o contexto 2D do canvas para desenhar um esquadro preto com um triângulo branco dentro dele. As coordenadas dos pontos do esquadro são especificadas como argumentos da função desenhaEsquadro, e a cor de preenchimento também é passada como argumento.

Espero que tenha te ajudado a entender.

Um abraço e bons estudos.

pincel.moveTo((6 * xa + xc) / 7, (9 * ya + 5 * yc) / 14) move o pincel para a posição inicial do triângulo.

pincel.lineTo((6 * xa + xc) / 7, (ya + 6 * yc) / 7) desenha uma linha reta do ponto de partida até a posição final do triângulo.

pincel.lineTo((5 * xa + 9 * xc) / 14, (ya + 6 * yc) / 7) desenha outra linha reta do ponto anterior até a posição final do triângulo, completando o contorno do triângulo.

Ainda entendi essas partes