Files
havox/tutorials/midpoint_displacement/sketch.js
2026-03-16 18:03:17 +00:00

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');