Как найти высоту от хорды до дуги для любой точки хорды?

Есть хорда окружности, требуется найти высоту до окружности от любой точки хорды. Есть формулы для высоты от хорды до окружности из центра хорды, но никак не могу сообразить как считать для любой точки хорды.


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

Автор решения: MBo
h = R*(Cos(fi)-Cos(alpha/2))

где fi - угол отклонения от центра дуги, alpha - центральный угол дуги

→ Ссылка
Автор решения: Андрюха

Перенесем начало координат в центр окружности. Пусть (x2,y2) - радиус вектор одного края хорды. (x0,y0) - радиус вектор точки на хорде откуда идет перпендикуляр до окружности. (x,y) - радиус вектор точки пересечения перпендикуляра с окружностью (их две), h - искомая высота, R - радиус окружности. Тогда используя теорему Пифагора для треугольника (x0,y0)-(x,y)-(x2,y2) получаем систему из трех уравнений.

(1) (x-x2)^2+(y-y2)^2=(x0-x2)^2+(y0-y2)^2+h^2;
(2) x^2+y^2=R^2;
(3) (x-x0)^2+(y-y0)^2=h^2;

... 3 уравнения, три неизвестные - h,x,y. Решаем и получаем достаточно громоздкие формулы. Приведу их, надеюсь не накосячил..

h^2=(p-y*t-x0)^2+(y-y0)^2;
где 
t=(y0-y2)/(x0-x2);
p=(x0^2+y0^2-x0*x2-y0*y2)/(x0-x2);
y=(p*t+-\sqrt{R^2(t^2+1)-p^2})/(t^2+1);

находим два значения y, до ближайшей дуги и до дальней. До ближайшей будет меньшее значение. Далее пусть хорда задается своим начальным (x2,y2) и конечным(x1,y1) значениями. Надо перебрать все возможные (x0,y0). Если поделить хорду на n частей то формула для (x0,y0) следующая

(x2+(k/n)*(x1-x2),y2+(k/n)*(y1-y2))

где k-целое пробегает значение от 1 до n-1. И в каждом таком (x0,y0) вычисляем h по вышеописанным формулам.

→ Ссылка
Автор решения: Stanislav Volodarskiy

Окружность радиуса R, хорда с центральным углом 2α, на хорде задан параметр t ∈ [-1, 1] (0 - середина хорды). Тогда высота над хордой в точке t равна

H(t) = R[√(1 - t2sin2α) - cosα], t ∈ [-1, 1]

→ Ссылка