Мне нужна помощь в создании алгоритма, который может вычислить ограничивающую рамку для дуги. Обычно это простая проблема. Однако мне необходимо, чтобы один из краев прямоугольника был линией, соединяющей начальную и конечную точки дуги.
Мне трудно разработать алгоритм, который может вычислить дополнительные две точки прямоугольника.
Вот изображение того, что я пытаюсь вычислить:
Две фиолетовые точки, мне нужно разработать алгоритм, который определит эти два места. Зеленые точки - это известные точки, которые могут быть входами. Кроме того, я знаю радиус и центр дуги.
Мне понадобится алгоритм для обработки различных случаев, когда линия AB вертикальна, имеет наклон + и наклон -.
Я обдумывал несколько направлений. Например, я знаю, что прямая, проходящая через точку E, параллельна прямой AB. Поскольку она параллельна, это означает, что они будут иметь одинаковый уклон, и линия от точки A до фиолетовой точки перпендикулярна этой линии. Затем я могу рассмотреть точку пересечения прямой, проходящей через E, и этой перпендикулярной линии.
Этот метод кажется беспорядочным, потому что тогда мне нужно было бы рассмотреть случаи, когда наклон линии AB бесконечен и равен 0. Мне интересно, есть ли какой-нибудь алгоритм, который мог бы учитывать это автоматически (или даже не учитывать наклон вообще для линии AB)
Какие из пунктов вы знаете? Как определить расстояние CE? Похоже, это простая аналитическая геометрия. Обработка бесконечного наклона - это простая проверка if.
Зеленые точки - известные значения. Точки A, B, C, D и E. Я не хочу вдаваться в подробности того, как я знаю точку E, но в основном точка E является смещением точки D. Я вычислил угол BCD и знаю, что угол BCE будет равен тоже самое. Я использовал уравнение для круга, чтобы вычислить точки X и Y точки E, поскольку точка E находится на концентрической окружности.
Я действительно думаю, что это простая аналитическая геометрия, но я чувствую, что что-то упускаю
Что это за дуга? Тип описанного вами ограничивающего прямоугольника не существует, если касательная в точках A или B составляет тупой угол с AB (если только прямоугольник не может выходить за пределы A и B).
Это дуга окружности, угол которой никогда не превышает 180 °.
Достаточно легко вычислить вершину дуги. Это будет серединой края, противоположного AB; коробка следует оттуда.
Возможно, вы захотите опубликовать это на math.stackexchange.com. Как только вы разберетесь с математикой, превратить ее в алгоритм будет относительно легко. Еще один вопрос, вы имели в виду «когда линия AB горизонтальна» (как в вашем примере), а не вертикальна?





Вы утверждаете, что знаете точки A, B, C, D, E, и что амплитуда поддерживающего угла дуги окружности не превышает 180 ° (полукруг) .
Пусть P1 и P2, две точки, которые дополняют ограничивающую рамку (на чертеже, P1 - фиолетовая точка над A, а P2 - над B).
E-C = vector perpendicular to segment AB', i/e subtract C from E; its magnitude is equal to the distance EC.P1 = A + (E-C)P2 = B + (E-C)
Ограничивающая рамка = прямоугольник A, P1, P2, B
Если вам нужна более плотная посадка, вы можете заменить vector (E-C) на vector (D-C), чтобы разместить ограничивающий сегмент P1P2 по касательной к D.
Возможно, почитайте о матрицах