HANDY и предложение функции сложенного пикселя (pp) (ES6) (чтение-пиксель здесь ):
let pp= ((s='.myCanvas',c=document.querySelector(s),ctx=c.getContext('2d'),id=ctx.createImageData(1,1)) => (x,y,r=0,g=0,b=0,a=255)=>(id.data.set([r,g,b,a]),ctx.putImageData(id, x, y),c))()
pp(10,30,0,0,255,255); // x,y,r,g,b,a ; return canvas object
let pp= ((s='.myCanvas',c=document.querySelector(s),ctx=c.getContext('2d'),id=ctx.createImageData(1,1)) => (x,y,r=0,g=0,b=0,a=255)=>(id.data.set([r,g,b,a]),ctx.putImageData(id, x, y),c))()
// draw shape
for(let i=0; i<800; i++) {
let a = Math.PI*4*i/800;
let x=16*Math.sin(a)**3;
let y=13*Math.cos(a)-5*Math.cos(2*a)-2*Math.cos(3*a)-Math.cos(4*a);
pp(100+2.5*x,45-2.5*y,255,0,0,255)
}
<canvas class="myCanvas" width=200 height=100 style="background: black"></canvas>
Эта функция использует putImageData
и имеет часть инициализации (первая длинная строка).В начале вместо этого s='.myCanvas'
используйте свой CSS-селектор для вашего холста.
Если вы хотите нормализовать параметры до значения от 0 до 1, вам следует изменить значение по умолчанию a=255
на a=1
и добавить строку: *От 1020 * до id.data.set([r*255,g*255,b*255,a*255]),ctx.putImageData(id, x*c.width, y*c.height)
Приведенный выше удобный код хорош для специальных графических алгоритмов тестирования или для проверки концепции, но он не подходит для использования в производстве, где код должен быть читаемым и понятным.