Как рассчитать (x, y) для фиксированной длины дуги вдали от точки на окружности

StackOverflow https://stackoverflow.com/questions/4111045

Вопрос

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

У меня есть круг на 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, также образуют изоберы.

Должно быть легко выяснить оттуда.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top