Как рассчитать (x, y) для фиксированной длины дуги вдали от точки на окружности
-
29-09-2019 - |
Вопрос
Я провел столько часов на этом, я могу почувствовать, что мое здравоохранение медленно проскальзывает. Таким образом, любая помощь будет действительно по-настоящему оценена. Я постараюсь быть максимально мягким.
У меня есть круг на 2D-самолете. Я знаю декартовые координаты для его центральной точки (C) и радиуса (R).
Моя путаница проистекает из этой проблемы. Когда предоставлено точка на плоскости за пределами круга; Я могу рассчитать точку (p) на окружности круга, ближайшую к этой точке.
Что я хочу сделать, это определить координаты (x, y) 2 балла по окружности. Давайте назовем их P1 и P2. P1 и P2 - два конца дуги. Дуга имеет фиксированную длину (x). P - это точка на полпути между P1 и P2. Таким образом, длина дуги от P до P1 & P до P2 - это как х / 2.
Короче говоря: дан C, R, P, X; Мне нужно рассчитать P1 и P2.
Я пытаюсь записать это в C ++, но любые предложения или псевдокод будут великолепны.
Редактировать: X - длина дуги, а не прямая линия между P1 и P2
Решение
По кругу, угол theta
соответствует длине дуги theta * R
, то есть ваша дуга будет поддерживать угол theta = X / R
. Анкет Так что если начните с вашей точки зрения
P = C + R * (sin(u), cos(u))
Тогда просто поднимись/вниз theta/2
:
P1 = C + R * (sin(u + theta/2), cos(u + theta/2))
и
P2 = C + R * (sin(u - theta/2), cos(u - theta/2))
Другие советы
Арка, которая субтирует угол θ (в радианах), имеет длину дуги θr. Таким образом, вам нужен полууга θ = x/(2r). Затем вам нужно взять вектор (P -C), повернуть его по углам ± θ и добавить обратно в C, чтобы получить P1 и P2. Чтобы повернуть вектор на угол, умножьте его на Вращение матрицы.
Итак, в псевдокоде это было бы так:
θ = X/(2R)
A = 2x2 rotation matrix corresponding to a rotation by θ radians
A' = transpose of A
P1 = C + A * (P - C)
P2 = C - A' * (P - C)
Есть несколько вещей, которые могли бы помочь. Не собираюсь писать код, но я представляю, что решение будет основано на треугольниках. Рассмотреть возможность:
Любой радиус такая же длина.
Таким образом, треугольник, нарисованный от P1-P1-C, является изоляции.
Любая касательная перпендикулярна радиусу.
Мне было бы трудно доказать это прямо здесь и сейчас, но если вы расширяете линии от C до P1/P2 до касательной, которая пересекает круг при C-> P, также образуют изоберы.
Должно быть легко выяснить оттуда.