2
respostas

Muita polução e pouca intuição. Uma tentativa menos aleatória de função genérica para o esquadro.

Esse exercício do esquadro, foi o mais polêmico e com mais tópicos, pelo que vi até agora (faz falta um contador de tópicos na página para facilitar essa métrica, já fica aí uma sugestão aos devs da plataforma do curso). Reforço a crítica do colega Gabriel Misturini Reinhardt (76k4 xp, 32 posts) em https://cursos.alura.com.br/forum/topico-qual-formula-geometrica-o-professor-usou-para-chegar-a-esse-resultado-ja-estou-um-bom-tempo-pensando-nisso-e-nao-cheguei-a-uma-conclusao-alguem-pode-me-ajudar-110604 jogar números "misteriosos", sem o mínimo de explicação, como foi neste exercício fugiu à didática padrão do curso até então, causando uma confusão desnecessária e totalmente evitável, como se pôde acompanhar pelo fórum. Custava nada colocar um comentário explicativo, elucidando o raciocínio como fez o colega LUCCAS DA SILVA OLIVEIRA (24k1 xp, 2 posts), no link já referido (pfv, me ensinem a referenciar links e pessoas aqui na plataforma! Onde acho um tutorial com essas e outras formatações que funcionam aqui?). Da maneira que foi apresentada a solução, só serve para o cálculo daquele esquadro específico. Em suma, foi uma solução preguiçosa e limitada. Rodei bastante este tópico, e as soluções apresentadas pelos colegas, não fugiram desta limitação, basicamente serviam para desenhar bem ou razoavelmente o esquadro proposto, ficando bem distorcido para outros de outras dimensões. Como programadores, creio que sempre buscamos automatizar processos e definir padrões lógicos e intuitivos replicáveis. Ainda bem que fui tentar fazer meu programa antes de ver esta polêmica "solução" do instrutor.

<canvas width="600" height="500"></canvas>
<! altura aumentado para 500 para o esquadro ficar bem
enquadrado >
<script>
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'gray';
    pincel.fillRect(0, 0, 600, 500);
//fundo de tela do canvas
    function desenhaTexto(x, y, texto, cor) {
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.font='36px Georgia';
        pincel.fillStyle=cor;
        pincel.fillText(texto, x, y);    
    }

    function desenhaEsquadro(xa, ya, xc, yc, espessura, cor){
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.fillStyle=cor; //corpo do esquadro
        pincel.beginPath();
        pincel.moveTo(xa, ya);
        pincel.lineTo(xa, yc);
        pincel.lineTo(xc, yc);
        pincel.fill();

        pincel.fillStyle="gray"; //mesma cor de fundo
        pincel.beginPath();
        pincel.moveTo(xa + espessura, ya + 2*espessura);
        pincel.lineTo(xa + espessura, yc - espessura);
        pincel.lineTo(xc - 2*espessura, yc - espessura);
        pincel.fill();

        desenhaTexto (xa + 10, ya + 60, 'A', 'red');
        desenhaTexto (xa + 10, yc - 10, 'B', 'red');
        desenhaTexto (xc - 60, yc - 10, 'C', 'red');


//empiricamente foi colocado fator 2 nos pontos A e C para adequar o esquadro; devo investigar matematicamente isto posteriormente. Percebi que fica distorcido se o esquadro for muito assimétrico
// Resolvi também desenhar localização dos pontos
    }
    desenhaEsquadro(50,50,400,400,50, 'black');
    desenhaEsquadro(300,50,600,300,30, 'black');

//atenção na escolha das cores

</script>

Basicamente criei um parâmetro para a mais, a espessura, e empiricamente, percebi que o fator 2 na espessura (vide código) "servia" para o esquadro ficar harmônico. Percebi também que para esquadros muito assimétricos, o vazamento interno fica torto. Para acumular funcionalidade, acrescentei também a indicação dos pontos. Para o código ficar verdadeiramente genérico para qualquer esquadro, os fatores tem que ser adequados, acredito que o raciocínio apresentado pelo Luccas, pode ajudar na melhor adequação desses parâmetros. Um possível melhoramento para quando aprender tratamento de erros, será também avaliar se as dimensões da espessura, são coerentes com os pontos A e C dos parâmetros e não sendo, informar ao usuário para reajuste. Aberto à sugestão dos colegas para melhoramento de código e elucidação da geometria envolvida e também para dicas de formatação pedidas.

2 respostas

Fala, Raphael! Tudo bem contigo?

Bacana sua solução, meu amigo!!!

A função criada pelo professor foi realmente mais complexa e isso nos dá um parâmetro de como construir uma solução mais simples ou, para aqueles que dominam a matemática, construir algo como a solução dele onde até mesmo a explicação utilizada pelo Luccas Oliveira foi excelente.

Concordo que deveria ter uma explicação bem detalhada sobre o processo de construção, pois nem todos temos esse domínio no ramo das exatas.

O caso mais recente que vi no fórum foi a solução da Bruna Guimarães bem funcional, enxuto e com resultado final muito bacana!

Mas, Raphael, obrigado por compartilhar sua solução e essa discussão sobre apresentar outras formas para chegarmos em outros resultados até, só deixa cada vez mais rico em conhecimentos, contribuindo muito para a comunidade que passa por esse exercício!!! ;-)

Sobre referenciar links e outras formatações, nesta caixa onde postam as dúvidas, existe um ícone chamado formatação. Ao clicar, aparecerá diversas firmas de formatar seus textos, inclusive inserir links!

Temos também um vídeo onde o Paulo Silveira mostra como utilizarmos markdowns em nosso fórum.

Espero ter ajudado!

Um abraço e bons estudos, Raphael!

Fala Cássio! Feliz 2021!

Que parte do meu código que tu gostastes?

Grato pelo retorno e pelas dicas de formatação! Não havia percebido uma barra de rolagem no botão "Formataçao", acho que já é suficiente para referenciar links. O link do vídeo que vc me mandou está dando 404.

Sobre a "solução" do "professor", o maior problema para mim nem está na complexidade geométrica envolvida, mas sim na solução limitada, usando constantes (que não foram elucidadas) em vez de uma solução genérica. A solução apresentada, só serve para os pontos de dimensões semelhantes. Vi o tópico da Bruna e achei a mesma limitação.

O caminho para uma solução geral, creio que está na solução apresentada pelo Luccas. Por ora, estou tentando avançar em outros cursos, creio que só poderei me debruçar no código mais para frente. Vou deixar o tópico aberto por mais um tempo, na esperança de alguém apresentar o melhoramento proposto. Se ninguém aparacer com uma solução satisfatória nas próximas semanas, devo marca sua resposta como "solucionada", pela ajuda na elucidação da formatação.

Um abraço e bons estudos!