Помощь в создании алгоритма создания рамки вокруг дуги

Мне нужна помощь в создании алгоритма, который может вычислить ограничивающую рамку для дуги. Обычно это простая проблема. Однако мне необходимо, чтобы один из краев прямоугольника был линией, соединяющей начальную и конечную точки дуги.

Мне трудно разработать алгоритм, который может вычислить дополнительные две точки прямоугольника.

Вот изображение того, что я пытаюсь вычислить:

Помощь в создании алгоритма создания рамки вокруг дуги

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

Мне понадобится алгоритм для обработки различных случаев, когда линия AB вертикальна, имеет наклон + и наклон -.

Я обдумывал несколько направлений. Например, я знаю, что прямая, проходящая через точку E, параллельна прямой AB. Поскольку она параллельна, это означает, что они будут иметь одинаковый уклон, и линия от точки A до фиолетовой точки перпендикулярна этой линии. Затем я могу рассмотреть точку пересечения прямой, проходящей через E, и этой перпендикулярной линии.

Этот метод кажется беспорядочным, потому что тогда мне нужно было бы рассмотреть случаи, когда наклон линии AB бесконечен и равен 0. Мне интересно, есть ли какой-нибудь алгоритм, который мог бы учитывать это автоматически (или даже не учитывать наклон вообще для линии AB)

Возможно, почитайте о матрицах

Ed Heal 12.04.2018 21:44

Какие из пунктов вы знаете? Как определить расстояние CE? Похоже, это простая аналитическая геометрия. Обработка бесконечного наклона - это простая проверка if.

Prune 12.04.2018 22:11

Зеленые точки - известные значения. Точки A, B, C, D и E. Я не хочу вдаваться в подробности того, как я знаю точку E, но в основном точка E является смещением точки D. Я вычислил угол BCD и знаю, что угол BCE будет равен тоже самое. Я использовал уравнение для круга, чтобы вычислить точки X и Y точки E, поскольку точка E находится на концентрической окружности.

philm 12.04.2018 22:18

Я действительно думаю, что это простая аналитическая геометрия, но я чувствую, что что-то упускаю

philm 12.04.2018 22:19

Что это за дуга? Тип описанного вами ограничивающего прямоугольника не существует, если касательная в точках A или B составляет тупой угол с AB (если только прямоугольник не может выходить за пределы A и B).

meowgoesthedog 13.04.2018 00:28

Это дуга окружности, угол которой никогда не превышает 180 °.

philm 13.04.2018 00:29

Достаточно легко вычислить вершину дуги. Это будет серединой края, противоположного AB; коробка следует оттуда.

meowgoesthedog 13.04.2018 00:32

Возможно, вы захотите опубликовать это на math.stackexchange.com. Как только вы разберетесь с математикой, превратить ее в алгоритм будет относительно легко. Еще один вопрос, вы имели в виду «когда линия AB горизонтальна» (как в вашем примере), а не вертикальна?

paxdiablo 13.04.2018 06:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы утверждаете, что знаете точки 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.

Другие вопросы по теме