Files
sunny9898/task3/_delivery/Q3c/index.js
louiscklaw 5637fbf94f update,
2025-02-01 02:07:58 +08:00

97 lines
2.2 KiB
JavaScript

// circle_xy_list = [[circle_x, circle_y, clicked?], ......]
let circle_xy_list = [];
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
noFill();
let c_list_length = circle_xy_list.length;
for (let i = 0; i < c_list_length; i++) {
circle_x = circle_xy_list[i][0];
circle_y = circle_xy_list[i][1];
circle(circle_x, circle_y, 30);
}
if (c_list_length > 1) {
for (let i = 0; i < c_list_length - 1; i++) {
if (c_list_length > 2 && i == 0) {
line(
circle_xy_list[0][0],
circle_xy_list[0][1],
circle_xy_list[c_list_length - 1][0],
circle_xy_list[c_list_length - 1][1]
);
}
line(
circle_xy_list[i][0],
circle_xy_list[i][1],
circle_xy_list[i + 1][0],
circle_xy_list[i + 1][1]
);
}
}
}
function mouseDragged() {
// console.log({ mouse_drag: [mouseX, mouseY] });
mouse_drag_end_xy = [mouseX, mouseY];
mouse_released = false;
for (let i = 0; i < circle_xy_list.length; i++) {
if (circle_xy_list[i][2] == true) {
circle_xy_list[i][0] = mouseX;
circle_xy_list[i][1] = mouseY;
}
}
// prevent default
return false;
}
function mouseReleased() {
// console.log({ mouse_release: [mouseX, mouseY] });
mouse_drag_end_xy = [mouseX, mouseY];
mouse_dragging = false;
mouse_released = true;
for (let i = 0; i < circle_xy_list.length; i++) {
circle_xy_list[i][2] = false;
}
}
function pythTheorem(a, b) {
return Math.pow(Math.pow(a, 2) + Math.pow(b, 2), 0.5);
}
function mousePressed() {
// console.log({ mouse_press: [mouseX, mouseY] });
mouse_drag_start_xy = [mouseX, mouseY];
mouse_dragging = true;
mouse_released = false;
if (circle_xy_list.length > 0) {
circle_found = false;
for (let i = 0; i < circle_xy_list.length; i++) {
[circle_x, circle_y] = circle_xy_list[i];
if (pythTheorem(circle_x - mouseX, circle_y - mouseY) < 30) {
circle_xy_list[i][2] = true;
circle_found = true;
break;
}
}
if (circle_found == false) {
circle_xy_list.push([mouseX, mouseY, false]);
}
} else {
circle_xy_list.push([mouseX, mouseY, false]);
}
}