CANVAS. При рисовании окружности из частей, начинается "искажение"
Доброго времени!
При рисовании круга, состоящего из разноцветных "кусков" начинается "искажение" итогового круга. Вот код: <!DOCTYPE html> <html> <body> <canvas id="circle"></canvas> </body> <script> var circle = document.getElementById("circle"); circle.width = 256; circle.height = 256; var context = circle.getContext('2d'); for(var i = 1; i < 361; i++){ context.beginPath(); context.fillStyle = "RGB(255, "+i+", 0)"; context.arc(128, 128, 128, (i-1)*Math.PI/180, i*Math.PI/180, false); context.arc(128, 128, 0, 0, 1, false); context.fill(); } </script> </html> Кто знает или, может быть, сталкивался, подскажите, в чем дело? |
Лоэнрон,
добавьте run [HTML run][/HTML] |
Так лучше?
<!DOCTYPE html> <html> <body> <canvas id="circle"></canvas> </body> <script> var circle = document.getElementById("circle"); circle.width = 256; circle.height = 256; var context = circle.getContext('2d'); for(var i = 1; i < 1440; i++){ context.beginPath(); context.fillStyle = "RGB(255, "+i/4 +", 0)"; context.arc(128, 128, 128, (i-1)*Math.PI/720, i*Math.PI/720, false); context.arc(128, 128, 0, 0, 1, false); context.fill(); } </script> </html> |
Dilettante_Pro,
Намного... Однако, а откуда сие странное явление, и почему оно решается увеличением значений? Неужели неточные вычисления? Только, я полагаю, context.arc(128, 128, 128, (i-4)*Math.PI/720, i*Math.PI/720, false); Но огромное спасибо! Самое странное, если поставить в цикле for(var i = 1; i < 1440; i+=4) То опять начинаются "Искажения" |
Цитата:
<!DOCTYPE html> <html> <body> <canvas id="circle"></canvas> </body> <script> var circle = document.getElementById("circle"); circle.width = 256; circle.height = 256; var context = circle.getContext('2d'); for(var i = 1; i < 90; i++){ context.beginPath(); context.fillStyle = "RGB(255, "+i*4 +", 0)"; context.arc(128, 128, 128, (i-1)*Math.PI/45, i*Math.PI/45, false); context.arc(128, 128, 0, 0, 1, false); context.fill(); } </script> </html> |
Цитата:
<!DOCTYPE html> <html> <body> <canvas id="circle"></canvas> </body> <script> var circle = document.getElementById("circle"); circle.width = 256; circle.height = 256; var context = circle.getContext('2d'); for(var i = 1; i < 361; i++){ context.beginPath(); context.fillStyle = "RGB(255, 0, 0)"; context.arc(128, 128, 128, (i-1)*Math.PI/180, i*Math.PI/180, false); context.arc(128, 128, 0, 0, 1, false); context.fill(); } </script> </html> Опа! Не прав. Странно. Если делать сплошным у меня в коде все отображалось нормально. Все, я понял я не прав. Спасибо за разъяснение. |
Цитата:
|
Лоэнрон,
<!DOCTYPE html> <html> <body> <canvas id="circle"></canvas> <script> var circle = document.getElementById("circle"); circle.width = 256; circle.height = 256; var context = circle.getContext('2d'); context.lineWidth = 4; for(var i = 1; i < 360; i++){ context.beginPath(); context.arc(128, 128, 124, (i-1)*Math.PI/180, i*Math.PI/180, false); context.arc(128, 128, 0, 0, 1, false); context.strokeStyle = "RGB(255, "+i+", 0)"; context.stroke(); } </script> </body> </html> |
рони,
При увеличении окружности в 2 раза снова появляется "мусор". Помогает двойной удар: context.strokeStyle = "RGB(255, "+i+", 0)"; context.fillStyle = "RGB(255, "+i+", 0)"; context.stroke(); context.fill(); |
Цитата:
<!DOCTYPE html> <html> <body> <canvas id="circle"></canvas> <script> var circle = document.getElementById("circle"); circle.width = 512; circle.height = 512; var context = circle.getContext('2d'); context.lineWidth = 8; for(var i = 1; i < 360; i++){ context.beginPath(); context.arc(256, 256, 248, (i-1)*Math.PI/180.0, (i*Math.PI/180.0), false); context.arc(256, 256, 0, 0, 1, false); context.strokeStyle = "RGB(255, "+i+", 0)"; context.stroke(); } </script> </body> </html> |
Часовой пояс GMT +3, время: 20:41. |