PLAYGROUND (experimental)

grain

grain(amount, [ramp], [gamp], [bamp], [rfix], [gfix], [bfix], [points=uniform], [option=uniform]) -> NULL

Add Grain to full canvas

Arguments

NameRequiredDefaultDescription
amountyes-Amount on grain (5 => random grain between -5 and 5)
ramp--Red amplifier, 0 for no grain
gamp--Green amplifier, 0 for no grain
bamp--Blue amplifier, 0 for no grain
rfix--ramp is fixed, not random
gfix--gamp is fixed, not random
bfix--bamp is fixed, not random
points-uniformcoords of zone [x1,y1,x2,y2] - if empty:all canvas
option-uniformuniform, gaussien, luminance

Full example

canvas(1000, 1000, "#EAEBEB");
stroke("#000");
weight(1);

var offsetY = 30 ;
var oY = 0 ;


def tangram(posx, posy, w) {
    var x = posx*tanSize + w/2;
    var y = posy*tanSize + posy + w/2;
    
    var h = w;
    var u = w / 4;

    coord_open();
    coord_translate(x,y);
    // 2 grands triangles
    triangle_right(cx=0, cy=0, a=u*2*sqrt(2), b=u*2*sqrt(2), angle=PI*5/4, from=true, fill="#66BB6A");
    triangle_right(cx=0, cy=0, a=u*2*sqrt(2), b=u*2*sqrt(2), angle=PI*3/4, from=true, fill="#EF5350");
    // 1 triangle moyen
    triangle_right(cx=u*2, cy=u*2, a=u*2, b=u*2, angle=PI, from=true, fill="#BDBDBD");
    // 1 carré
    polygon([u,-u, u*2,0, u,u, 0,0], fill="#FFCA28");
    // 2 petits triangles
    triangle_right(cx=u, cy=-u, a=u*sqrt(2), b=u*sqrt(2), angle=-PI/4, from=true, fill="#EC407A");
    triangle_right(cx=0, cy=0, a=u*sqrt(2), b=u*sqrt(2), angle=PI/4, from=true, fill="#26C6DA");
    // 1 parallélogramme
    polygon([-u*2,u*2, 0,u*2, u,u, -u,u], fill="#7E57C2");
    coord_close();
}
var tanSize = 250 ;

tangram(0,0, tanSize);
tangram(1,0, tanSize);
tangram(2,0, tanSize);
tangram(3,0, tanSize);

for (var i=0; i<4;i++) { tangram(i,0, tanSize); }
for (var i=0; i<4;i++) { tangram(i,1, tanSize); }
for (var i=0; i<4;i++) { tangram(i,2, tanSize); }
for (var i=0; i<4;i++) { tangram(i,3, tanSize); }



load_text_default(30);


def getRect(posx, posy) {
    return [posx*tanSize, posy*tanSize + posy, (posx+1)*tanSize, (posy+1)*tanSize + posy];
}
def explain(txt, posx, posy) {
    text(txt, tanSize/2 + posx*tanSize, tanSize + posy*tanSize , ax=middle, ay=start);
}
var gAmount = 20 ;


oY = 0 ;

grain(gAmount, points=getRect(0,0));
explain("full "+gAmount, 0, 0);

grain(gAmount, ramp=gAmount, points=getRect(1,0));
explain("ramp=gAmount", 1, 0);

grain(gAmount, gamp=gAmount, points=getRect(2,0));
explain("gamp=gAmount", 2, 0);

grain(gAmount, bamp=gAmount, points=getRect(3,0));
explain("bamp=gAmount", 3, 0);

oY += offsetY;
grain(gAmount*2, points=getRect(0,1));
explain("full "+gAmount*2, 0, 1);


grain(gAmount, ramp=gAmount, rfix=true, points=getRect(1,1));
explain("ramp + rfix", 1, 1);
grain(gAmount, gamp=gAmount, gfix=true, points=getRect(2,1));
explain("gamp + gfix", 2, 1);
grain(gAmount, bamp=gAmount, bfix=true, points=getRect(3,1));
explain("bamp + bfix", 3, 1);



oY += offsetY;
grain(gAmount*3, points=getRect(0,2));
explain("full "+gAmount*3, 0, 2);


// oY += offsetY;
// grain(gAmount*4, points=getRect(0,3));
// explain("full "+gAmount*4, 0, 3);


save(whoami() + ".png");