xxxxxxxxxx
125
var symmetry = 16;
var angle = 360 / symmetry;
var halfw, halfh;
var saveButton;
var clearButton;
var sizeSlider;
var sizeInput;
var symmInput;
var autoCheck;
var xoff = 0;
var yoff = 100000;
var autorun = false;
function setup() {
createCanvas(windowHeight - 50, windowHeight - 50);
halfw = width / 2;
halfh = height / 2;
background(0);
angleMode(DEGREES);
autoCheck = createCheckbox('Авто', false);
autoCheck.changed(setAuto);
symmInput = createInput("Введи число симметричных зон");
symmInput.style('width', '198px');
symmInput.input(changeSymm);
saveButton = createButton("Сохранить");
clearButton = createButton("Очистить");
saveButton.mousePressed(saveSnowflake);
clearButton.mousePressed(clearBg);
sizeSlider = createSlider(1, 60, 12, 0.01);
sizeInput = createInput("Введи размер кисти (1...60)");
sizeInput.style('width', '170px');
sizeInput.input(myInput);
colorMode(HSB, 255, 255, 255);
noStroke();
}
function ellipseLine(sz) {
for (let i = 0; i < 1; i += 0.01) {
ellipse(lerp(pmouseX - halfw, mouseX - halfw, i), lerp(pmouseY - halfh, mouseY - halfh, i), sz, sz)
}
}
function changeSymm() {
symmetry = this.value();
angle = 360 / symmetry;
clearBg();
}
function setAuto() {
if (this.checked()) {
autorun = true;
} else {
autorun = false;
}
}
function myInput() {
sizeSlider.value(this.value());
}
function saveSnowflake() {
save('snowflale.png');
}
function clearBg() {
background(0);
}
function draw() {
if (mouseIsPressed) {
autorun = false;
autoCheck.checked(false);
}
if (autorun) {
mouseX += noise(xoff) * random(-10, 10);
mouseY += noise(yoff) * random(-10, 10);
yoff += 0.01;
if (mouseX < 0 || mouseX > width) mouseX = halfw;
if (mouseY < 0 || mouseY > height) mouseY = halfh;
}
if ((mouseIsPressed || autorun) && mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
translate(halfw, halfw)
fill(noise(xoff) * 255, 255, 255);
xoff += 0.01;
let sz = sizeSlider.value();
for (let i = 0; i < symmetry; i++) {
rotate(angle);
if (dist(pmouseX, mouseX, pmouseY, mouseY) > sz) {
ellipseLine(sz);
push();
scale(1, -1);
ellipseLine(sz);
pop();
} else {
let mx = mouseX - halfw;
let my = mouseY - halfh;
ellipse(mx, my, sz, sz);
push();
scale(1, -1);
ellipse(mx, my, sz, sz);
pop();
}
}
}
}