Вы попросили самый короткий код, так что вот оно. В четыре строки это можно сделать, хотя есть еще квадратичный.
Я считал, что точка находится за пределами круга.
Я не учел, что произойдет, если точка находится прямо над или под центром круга, то есть cX = pX.
m=(cY-pY)/(cX-pX); //slope
b=cY-m*cX; //or Py-m*Px. Now you have a line in the form y=m*x+b
X=( (2mcY)*((-2*m*cY)^2-4*(cY^2+cX^2-b^2-2*b*cY-r^2)*(-1-m^2))^(1/2) )/(2*(cY^2+cX^2-b^2-2*bc*Y-r^2));
Y=mX+b;
1] Получите уравнение для линии, соединяющей точку и центр окружности.
2] Двигайтесь вдоль линии на расстоянии одного радиуса от центра, чтобы найти точку на окружности. То есть: радиус = a ^ 2 + b ^ 2, который: r = ((cY-Y) + (cX-X)) ^ (1/2)
3] Решить квадратично. X = quadratic_solver (r = ((cY-Y) + (cX-X)) ^ (1/2), X), который, если вы подставите в Y = m * X + b, вы получите этот ад выше.
4] X и Y - ваши результаты по кругу.
Я вполне уверен, что где-то допустил ошибку, пожалуйста, оставьте комментарий, если кто-нибудь что-то найдет. Конечно, это вырожденный, один ответ наиболее далек от вашей точки зрения, а другой - ближайший.