90 lines
2.2 KiB
JavaScript
90 lines
2.2 KiB
JavaScript
var MidDisplacement = function( p ){
|
|
|
|
var points = [];
|
|
var iterations = 1;
|
|
const roughness = 1;
|
|
var vertical_displacement;
|
|
let button;
|
|
|
|
p.setup = function(){
|
|
p.createCanvas(800, 500);
|
|
p.frameRate(2);
|
|
p.background(217);
|
|
|
|
button = p.createButton('Reset Button')
|
|
//button.position(p.width, p.height);
|
|
button.mousePressed(p.resetSketch);
|
|
p.initValues();
|
|
|
|
}
|
|
|
|
p.draw = function(){}
|
|
|
|
p.bubbleSort = function() {
|
|
var length = points.length;
|
|
//Number of passes
|
|
for (var i = 0; i < length; i++) {
|
|
//Notice that j < (length - i)
|
|
for (var j = 0; j < (length - i - 1); j++) {
|
|
//Compare the x values
|
|
if(points[j].x > points[j+1].x) {
|
|
//Swap the numbers
|
|
var tmp = points[j]; //Temporary variable to hold the current number
|
|
points[j] = points[j+1]; //Replace current number with adjacent number
|
|
points[j+1] = tmp; //Replace adjacent number with current number
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
p.mouseClicked = function(){
|
|
if (iterations < 11){
|
|
var pLength = points.length;
|
|
|
|
for (var i = 0; i < pLength - 1; i++){
|
|
|
|
var midX = (points[i].x + points[i + 1].x) / 2;
|
|
var midY = (points[i].y + points[i + 1].y) / 2;
|
|
midY += p.random(-vertical_displacement, vertical_displacement);
|
|
|
|
points[pLength + i] = new dot(midX, midY);
|
|
}
|
|
|
|
iterations += 1;
|
|
vertical_displacement *= 2 ** (-roughness);
|
|
|
|
p.bubbleSort();
|
|
|
|
p.clear();
|
|
p.background(215);
|
|
|
|
for (var i = 0; i < pLength; i++){
|
|
p.strokeWeight(4);
|
|
p.stroke(0);
|
|
p.point(points[i].x * 2, points[i].y);
|
|
|
|
p.strokeWeight(1);
|
|
p.stroke(215, 15, 15);
|
|
p.line(points[i].x * 2, points[i].y, points[i+1].x * 2, points[i+1].y);
|
|
}
|
|
}
|
|
}
|
|
|
|
p.initValues = function(){
|
|
points[0] = new dot(0, p.height/2);
|
|
points[1] = new dot(p.width, p.height/2);
|
|
|
|
vertical_displacement = points[0].y + points[1].y / 2;
|
|
vertical_displacement *= 2 ** (-roughness);
|
|
|
|
iterations = 1;
|
|
}
|
|
|
|
p.resetSketch = function(){
|
|
points.length = 0;
|
|
p.clear()
|
|
p.background(217);
|
|
p.initValues();
|
|
}
|
|
};
|
|
var myp5 = new p5(MidDisplacement, 'c1'); |