Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

106
Visualizações
gráfico circular con lienzo - algoritmo - resultado incorrecto

Escribí este algoritmo que, basado en los datos de la matriz, crea un gráfico circular usando el elemento canvas:

 function pieChart() { canvas = document.getElementById('pie-chart'); canvas.width = 300; canvas.height = 300; context = canvas.getContext('2d'); const data = [1, 5, 4, 3]; const colors = ['brown', 'yellow', 'purple', 'pink']; let summ = 0; for (let index = 0; index < data.length; index++) { summ += data[index]; } function deg(num) { return num / summ * 360; } function rad(deg) { return deg * (Math.PI / 180); } let start = 3 * Math.PI / 2; for (let index = 0; index < data.length; index++) { context.beginPath(); context.moveTo(150, 150); context.arc(150, 150, 150, start, rad(deg(data[index])), false); context.lineTo(150, 150); context.fillStyle = colors[index]; context.fill(); start = rad(deg(data[index])); } }
 <body onload="pieChart();"> <canvas id="pie-chart"></canvas> </body>

Aquí está el resultado que obtuve:
ingrese la descripción de la imagen aquí

¿Qué estoy haciendo mal?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Hay dos problemas notables.

  1. start = rad(deg(data[index]));

Está moviendo su ángulo de inicio para que tenga el tamaño de la cuña anterior, cuando en realidad desea agregar el tamaño de la cuña anterior. En cambio, esto debería ser:

 start += rad(deg(data[index]));
  1. context.arc(150, 150, 150, start, rad(deg(data[index])), false);

El ángulo final que especifique aquí es el tamaño del ángulo de cuña. En cambio, debe compensarse desde el ángulo de inicio (es decir, debe agregarle el ángulo de inicio). En cambio, esto debería ser:

 context.arc(150, 150, 150, start, start + rad(deg(data[index])), false); 

 function pieChart() { canvas = document.getElementById('pie-chart'); canvas.width = 300; canvas.height = 300; context = canvas.getContext('2d'); const data = [1, 5, 4, 3]; const colors = ['brown', 'yellow', 'purple', 'pink']; let summ = 0; for (let index = 0; index < data.length; index++) { summ += data[index]; } function deg(num) { return num / summ * 360; } function rad(deg) { return deg * (Math.PI / 180); } let start = 3 * Math.PI / 2; for (let index = 0; index < data.length; index++) { context.beginPath(); context.moveTo(150, 150); context.arc(150, 150, 150, start, start + rad(deg(data[index])), false); context.lineTo(150, 150); context.fillStyle = colors[index]; context.fill(); start += rad(deg(data[index])); } }
 <body onload="pieChart();"> <canvas id="pie-chart"></canvas> </body>

about 4 years ago · Juan Pablo Isaza Relatório

0

Estabas dibujando cada arco desde el ángulo del último arco hasta el ángulo del nuevo arco pero AMBOS comenzando desde 0. Necesitas SUMAR el ángulo del nuevo arco al resultado anterior.

También tenga en cuenta el último parámetro de la función de arc . Si es falso, el arco se dibuja en el sentido de las agujas del reloj, si es verdadero, se dibuja en el sentido contrario a las agujas del reloj.

https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/arc

 document.addEventListener("DOMContentLoaded", function(){ canvas = document.getElementById('pie-chart'); canvas.width = 300; canvas.height = 300; context = canvas.getContext('2d'); const data = [1, 5, 4, 3]; const colors = ['brown', 'yellow', 'purple', 'pink']; let summ = 0; for (let index = 0; index < data.length; index++) { summ += data[index]; } function deg(num) { return (num / summ) * 360; } function rad(deg) { return deg * (Math.PI / 180); } let lastAngle = 2 * Math.PI; //Starting angle let thisAngle = lastAngle; for (let index = 0; index < data.length; index++) { thisAngle += rad(deg(data[index])); context.beginPath(); context.moveTo(150, 150); context.arc(150, 150, 150, lastAngle, thisAngle, false); context.lineTo(150, 150); context.fillStyle = colors[index]; context.fill(); lastAngle = thisAngle; } } );
 <html> <body> <canvas id="pie-chart"> </canvas> </body> </html>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda