Сообщение от impersonalis
Если не ошибаюсь, в выводе произошло смешение y как координаты и как величины перпендикуляра. А так - упрощение даёт похожий результат (проверь).
|
Сообщение от dsd
А вот нет, я в виду имел уравнение окружности и прямой, и дальше искал пересечение.
|
y*y + x*x - r*r = 0
x = +-sqrt(r*r - y*y)
length = sqrt(r*r - y*y) - ( - sqrt(r*r - y*y)) = 2 * sqrt (r*r - y*y)
Где y это координата на оси Y. С учетом, что центр окружности в (0,0).
И формула работает только если секущая паралельная оси X.
Вообщем ето только частный случай.
Если секущая не паралельна оси X, тогда length будит только длиной проекции секущей на ось X. Чтобы найти длину самой секущей, нужно также найти длину проекции секущей на ось Y.
Также нужно улучшить формулу, чтобы окружность могла быть не только в (0,0).
В итоге получим
lenghtX = 2 * sqrt (r*r - (y-y0)*(y-y0))
lenghtY = 2 * sqrt (r*r - (x-x0)*(x-x0))
lenght = sqrt (lenghtX*lenghtX + lenghtY*lenghtY) =
= sqrt (4* (r*r - (y-y0)*(y-y0)) + 4 * (r*r - (x-x0)*(x-x0)) )
= 2 * sqrt( 2*r*r - (y-y0)*(y-y0) - (x-x0)*(x-x0) )
lenght = 2 * sqrt( 2*r*r - (y-y0)*(y-y0) - (x-x0)*(x-x0) )
Где
r - радиус.
x0, y0 - координаты центра окружности.
x,y - координаты точки пересечения перпендикуляра проведенного из центра окружности к секущей.