Here is a code I wrote in which I made two different arcs inside a circle. As of now both the arcs changes color at the same time when clicked inside the circle.
I cannot find a way to change the color of the specific arc which is getting clicked on.
Code
function setup() { createCanvas(500, 500); r = random(255); g = random(255); b = random(255); } function draw() { background(255); stroke(0); strokeWeight(10); fill(r, g, b, 127); arc(200, 200, 200, 200, HALF_PI, PI*1.75); stroke(0); strokeWeight(10); fill(r-200, g-20, b-55, 200); arc(200, 200, 200, 200, 5.50, HALF_PI); fill(255); ellipse(200, 200, 150, 150); } function mousePressed() { let d = dist(mouseX, mouseY, 200, 200); if (d < 100) { // Pick new random color values r = random(255); g = random(255); b = random(255); } }
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"></script>
You need 2 colors. I recommend to use color()
:
let color1, color2;
function setup() {
createCanvas(500, 500);
color1 = color(random(255), random(255), random(255), 127);
color2 = color(random(255), random(255), random(255), 200);
}
function draw() {
// [...]
fill(color1);
arc(200, 200, 200, 200, startAngle, endAngle);
// [...]
fill(color2);
arc(200, 200, 200, 200, endAngle, startAngle);
}
Define a start angle and end angle:
let startAngle = Math.PI/2;
let endAngle = Math.PI*1.75;
Compute the angle of the vector form the center of the arc to the mouse:
let angle = Math.atan2(mouseY - 200, mouseX - 200);
if (angle < 0) angle += Math.PI*2;
Change one of the colors accordingly:
if (d < 100 && d > 75) {
if (angle > startAngle && angle < endAngle) {
color1 = color(random(255), random(255), random(255), 127);
} else {
color2 = color(random(255), random(255), random(255), 127);
}
}
let color1, color2; let startAngle = Math.PI/2; let endAngle = Math.PI*1.75; function setup() { createCanvas(500, 500); color1 = color(random(255), random(255), random(255), 127); color2 = color(random(255), random(255), random(255), 200); } function draw() { background(255); stroke(0); strokeWeight(10); fill(color1); arc(200, 200, 200, 200, startAngle, endAngle); stroke(0); strokeWeight(10); fill(color2); arc(200, 200, 200, 200, endAngle, startAngle); fill(255); ellipse(200, 200, 150, 150); } function mousePressed() { let d = dist(mouseX, mouseY, 200, 200); let angle = Math.atan2(mouseY - 200, mouseX - 200); if (angle < 0) angle += Math.PI*2; if (d < 100 && d > 75) { if (angle > startAngle && angle < endAngle) { color1 = color(random(255), random(255), random(255), 127); } else { color2 = color(random(255), random(255), random(255), 127); } } }
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"></script>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.