Извините, если это считается повторным вопросом, но ответы, которые я видел здесь, слишком сложны для моих нужд.Формула для определения, пересекает ли отрезок линии круг (плоский)
Мне просто нужно выяснить, пересекает ли отрезок линии круг. Мне не нужно найти расстояние до линии от центра круга, мне не нужно решать для точек пересечения.
Причина, по которой мне нужно что-то простое, заключается в том, что я должен закодировать это в SQL и не могу вызвать внешние библиотеки, и мне нужно написать эту формулу в предложении WHERE ... в основном это нужно сделать в один оператор, который я могу подключить значения в.
Предполагая 2 точки A (Ax, Ay) и B (Bx, By) для описания отрезка линии и окружности с центральной точкой C (Cx, Cy) и радиусом R, используемая нами в настоящее время формула:
(R R ((Ах-Ви) (Ах-Ви) + (Ай-К) (Ай-К))) - (((Ах-Сх) (К-Cy)) - ((Bx-Cx) (Ay-Cy)))> 0
Эта формула взята из link text и основана на окружности с центром в 0,0.
Причина, по которой я публикую, это то, что я получаю странные результаты, и я задавался вопросом, сделал ли я что-то глупое. :(
Спасибо за предложение, но, к сожалению, мне нужно сделать этот расчет для разных кругов (каждый раз против множества тысяч сегментов), поэтому я не могу ничего рассчитать заранее. – Dan
Я вижу, что координаты круга не являются частью записей вообще (?) Возможно, вы захотите указать это в своем вопросе. – chiccodoro
Возможно, стоит упомянуть, что я отфильтровываю большую часть строк перед этим вычислением, проверяя это: 1) по крайней мере одна из точек A, B имеет значение x по крайней мере (центр круга - радиус) 2) по крайней мере один точек A, B имеет максимум x (радиус центра + радиус) 3) по крайней мере одна из точек A, B имеет значение ay не менее (радиус центра - радиус) 4) по крайней мере одна из точек A, B имеет значение не более (радиус центра + радиус) Если эти условия не все выполнены, то вся линия лежит вне крестообразной формы, образуя квадрат, центрированный по кругу длиной 2R. – Dan