let angleVarianzPIDivider = 1;
let thicknesIsLengthDependent = false;
let thicknesFactor = 0.005;
let thicknesLengthToggle;
let thicknessLengthSlider;
parentDiv = createDiv('');
parentDiv.style('color', '#ffffffff');
radiusSliderP = createP('Radius ');
radiusSliderP.parent(parentDiv);
radiusSlider = createSlider(0, width / 2, width / 2.5, 1);
radiusSlider.parent(radiusSliderP);
angleVarianzSliderP = createP('Angle Varianz ');
angleVarianzSliderP.parent(parentDiv);
angleVarianzSlider = createSlider(1, 10, 0.1, 1);
angleVarianzSlider.parent(angleVarianzSliderP);
endLenghtP = createP('End Length ');
endLenghtP.parent(parentDiv);
endLengthInput = createInput('2');
endLengthInput.parent(endLenghtP);
strokeAlphaSliderP = createP('Line Alpha ');
strokeAlphaSliderP.parent(parentDiv);
strokeAlphaSlider = createSlider(0, 255, 25, 1);
strokeAlphaSlider.parent(strokeAlphaSliderP);
thicknessInputP = createP('Line Thickness ');
thicknessInputP.parent(parentDiv);
thicknessInput = createInput('6');
thicknessInput.parent(thicknessInputP);
thicknesLengthToggle = createCheckbox('Line Thickness is Length Dependent ', false);
thicknesLengthToggle.parent(parentDiv);
thicknessLengthSliderP = createP('Thicknes/length factor ');
thicknessLengthSliderP.parent(parentDiv);
thicknessLengthSlider = createSlider(0, 0.1, 0.05, 0.001);
thicknessLengthSlider.parent(thicknessLengthSliderP);
generateButton = createButton('Generate');
generateButton.mousePressed(generateSnowflake);
generateButton.parent(parentDiv);
parentDiv.position(10, 0);
showMenu ? parentDiv.show() : parentDiv.hide();
function generateSnowflake() {
radius = radiusSlider.value() / 2;
angleVarianzPIDivider = angleVarianzSlider.value();
endLength = endLengthInput.value();
thickness = thicknessInput.value();
strokeAlpha = strokeAlphaSlider.value();
thicknesIsLengthDependent = thicknesLengthToggle.checked();
thicknesFactor = thicknessLengthSlider.value();
for (let i = 0; i < symmetrieNumber; ++i) {
generateBranch(createVector(width / 2, height / 2), radius, (TWO_PI / symmetrieNumber) * i);
function generateBranch(origin, length, angle) {
if (length < endLength) {
let randomAngle = random(0, PI / angleVarianzPIDivider);
translate(origin.x, origin.y);
generateBranch(createVector(0, 0), length / 2, 0);
generateBranch(createVector(length, 0), length / 2, 0);
generateBranch(createVector(length / 2, 0), length / 2, -randomAngle);
generateBranch(createVector(length / 2, 0), length / 2, randomAngle);
stroke(255, strokeAlpha);
strokeWeight(thicknesIsLengthDependent ? (thickness * (length * thicknesFactor)) : thickness);