Координаты проекции точки на окружности

уже совсем запутался в тригонометрических формулах, так как везде пишут по-разному, суть такова, есть окружность и в ней точка, которая не должна заходить за пределы этой окружности, но координаты этой точки могут естественно быть больше. Сейчас это работает так:

const offset = { x: 25, y: 24 };
const radius = 20;

if (Math.pow(offset.x, 2) + Math.pow(offset.y, 2) < Math.pow(radius, 2)) {
    coordinates = offset;
}

Но тут проблема в том, что если условие не проходит, то точка естественно замирает на месте, а должна двигаться и дальше, просто в пределах окружности, поэтому как я понял, мне нужно находить проекцию от координаты, чтобы отображать ее.

введите сюда описание изображения

(Красным отмечена точка, которая должна отображаться, а за пределами - текущая точка)


Ответы (1 шт):

Автор решения: MBo

Cчитаем расстояние до точки, если оно больше радиуса - корректируем компоненты.

const offset = { x: 25, y: 24 };
const radius = 20;

len = Math.hypot(offset.x, offset.y) ;
if (len > radius) {
    coordinates.x = offset.x * radius / len;
    coordinates.y = offset.y * radius / len;
}
else {
    coordinates = offset;
    }
→ Ссылка