Расстояние от центра на прямую зависит от того, где в данный момент находится курсор мыши )
Но чтобы, "зрачок" не ушел вне "глаза" приходится делать проверку, и если он вышел за пределы, вернуть его к границе глаза
А возвращаю "зрачок" так:
1. Создаю вторую меньшую окружность в центре глаза (это и будет ограничивающая окружность, вне которой не может быть перемещен зрачок)
2. Создаю прямую, ее начало в центре глаза, а конец - позиция курсора
3. Определяю координаты пересечения ограничивающей окружности с прямой и перемещаю зрачок в эти координаты
На изображении показано определение куда вернуть "зрачок"
PS. Выложил исходный код. В нем сделан только 1 глаз с зрачком, но добавить 1-n глаз не так будет сложно
PSS. Не люблю подобные задачки, но вроде бы "первый блин не получился комом"
PSSS. Комментарии к функции
isIntersectionEllipseAndDirect не мои
Нашел функцию где то в инете - не помню где было (писал и гуглил ночью, когда очень хотелось добить алгоритм), в ней изменил название, интерфейс и упросил реализацию, остальное не трогал