var canvasWidth = 960; var canvasHeight = 500; var glyphSelector; var modeSelector; var sizeSelector; var val_sliders = []; function setup () { // create the drawing canvas, save the canvas element var main_canvas = createCanvas(canvasWidth, canvasHeight); main_canvas.parent('canvasContainer'); // create two sliders for (i=0; i<8; i++) { var slider = createSlider(0, 100, 50); slider.parent("slider" + (i+1) + "Container") slider.changed(sliderUpdated); slider.mouseMoved(sliderUpdated); slider.touchMoved(sliderUpdated); val_sliders.push(slider); } modeSelector = createSelect(); modeSelector.option('gradient'); modeSelector.option('analogy'); modeSelector.option('drive'); modeSelector.option('random_grid'); modeSelector.changed(modeChangedEvent); modeSelector.value('gradient'); modeSelector.parent('selector1Container'); glyphSelector = createSelect(); glyphSelector.option('glyph4'); glyphSelector.option('glyph8'); glyphSelector.changed(modeChangedEvent); glyphSelector.parent('selector2Container'); sizeSelector = createSelect(); sizeSelector.option('64'); sizeSelector.option('128'); sizeSelector.option('256'); sizeSelector.parent('selector3Container'); sizeSelector.value('128'); sizeSelector.changed(sizeChangedEvent); button = createButton('redo'); button.mousePressed(buttonPressedEvent); button.parent('buttonContainer'); noLoop(); refreshGridData(); modeChangedEvent(); } function sliderUpdated() { redraw(); } function mouseClicked() { analogyCycleStep = (analogyCycleStep + 1) % 3; if(analogyCycleStep == 0) { refreshAnalogyData(); } redraw(); } function dataInterpolate(data1, data2, val) { var d = new Array(8); for(var i=0; i<8; i++) { d[i] = lerp(data1[i], data2[i], val); } return d; } var numGridRows; var numGridCols; var gridValues; // row, col order var gridOffsetX, gridOffsetY; var gridSpacingX, gridSpacingY; // Generate data for putting glyphs in a grid var numAnalogyChoices = 5; var analogyValues = new Array(4); var analogyChoices = new Array(numAnalogyChoices); var analogyAnswer; var analogyCycleStep; function clamp(num, min, max) { return Math.min(Math.max(num, min), max); } function refreshAnalogyData() { for (var i=0; i<4; i++) { analogyValues[i] = new Array(8); } for (var i=0; i<3; i++) { for (var j=0; j<8; j++) { analogyValues[i][j] = random(100); } } for (var j=0; j<8; j++) { analogyValues[3][j] = clamp(analogyValues[1][j] - analogyValues[0][j] + analogyValues[2][j], 0, 100); // handle overflow analogyValues[1][j] = clamp(analogyValues[3][j] - analogyValues[2][j] + analogyValues[0][j], 0, 100); } analogyAnswer = Math.floor(random(numAnalogyChoices)) for (var i=0; i