简体   繁体   中英

Changing color of arcs on click

图片

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM