Arctangent

arctangent.pde
/**
 * Arctangent.
 *
 * Move the mouse to change the direction of the eyes.
 * The atan2() function computes the angle from each eye to the cursor.
 */

struct Eye {
    int x, y, size;
    float angle = 0.0;

    Eye(int tx, int ty, int ts) : x(tx), y(ty), size(ts) {}

    void update(int mx, int my) {
        angle = atan2(my - y, mx - x);
    }

    void display() {
        pushMatrix();
        translate(x, y);
        fill(255); noStroke();
        ellipse(0, 0, size, size);
        rotate(angle);
        fill(153, 204, 0);
        ellipse(size/4, 0, size/2, size/2);
        popMatrix();
    }
};

Eye e1(250,  16, 120);
Eye e2(164, 185,  80);
Eye e3(420, 230, 220);

void setup() {
    size(640, 360);
    noStroke();
}

void draw() {
    background(102);
    e1.update(mouseX, mouseY); e1.display();
    e2.update(mouseX, mouseY); e2.display();
    e3.update(mouseX, mouseY); e3.display();
}