p5(sketch => {
var stack = [];
var edges = [];
var ini_dot = -1;
let max_y = 0;
let radius = 7;
let number_of_dots = 50;
let count = 3;
let stop = false;
sketch.setup = function() {
sketch.frameRate(5);
sketch.createCanvas(800, 600);
sketch.background(255,255,255);
sketch.rectMode(sketch.CENTER);
for(let i = 0;i < number_of_dots; i++){
var dot = new Dot(sketch);
if(dot.y > max_y){
max_y = dot.y;
ini_dot = i;
}
dots.push(dot);
}
var dot_aux = new Dot(sketch);
dot_aux = dots[ini_dot];
dots[ini_dot] = dots[0];
dots[0] = dot_aux;
dots[0].color = sketch.color(255,0,0);
dots.sort(compare);
stack.push(0);
stack.push(1);
stack.push(2);
edges.push([0,1]);
};
sketch.draw = function() {
sketch.background(210,210,210);
for(let i = 0;i < dots.length; i++){
sketch.fill(dots[i].color);
if(!stop){
if(i == count){
sketch.fill(sketch.color(0,255,0));
}else if(i == stack[stack.length-2]){
sketch.fill(sketch.color(0,0,255));
}
}
sketch.circle(dots[i].x,dots[i].y,dots[i].diameter);
}
if(!stop){
while(dots[stack[stack.length-2]].triangle_orientation(dots[stack[stack.length-1]],dots[count])!=2){
stack.pop();
}
stack.push(count);
for(let i = 1; i < stack.length; i++){
sketch.line(dots[stack[i-1]].x,dots[stack[i-1]].y,dots[stack[i]].x,dots[stack[i]].y);
}
count = (count+1)%number_of_dots;
if(count == 1){
stop = true;
}
}
for(let i = 1; i < stack.length; i++){
sketch.line(dots[stack[i-1]].x,dots[stack[i-1]].y,dots[stack[i]].x,dots[stack[i]].y);
}
};
})