Поверните круг вокруг другого круга - PullRequest
0 голосов
/ 24 августа 2010

Короткий вопрос: Для точки P и отрезка L, как мне найти точку (или точки) на L, которые находятся точно на расстоянии X от P, если она гарантировала, что такая точка существует?

Более длинный способ задать этот вопрос с изображением.Учитывая два круга, один статический и один динамический, если вы перемещаете динамический к статическому по прямой линии, довольно легко определить точку контакта (см. 1, зеленая точка).

Теперь, если вы перемещаете динамический круг к статическому кругу под углом, определить точку контакта гораздо сложнее (см. 2, фиолетовая точка).Эту часть я уже сделал.То, что я хочу сделать, это после определения точки контакта уменьшить угол и определить новую точку контакта (см. 3, 4, красная точка).

В # 4 вы можете увидеть уголуменьшается менее чем наполовину, и новая точка контакта находится на полпути между прямой и исходной точкой.В # 7 вы можете видеть, что угол разделен пополам, но новая точка контакта перемещается намного дальше, чем на полпути назад, к точке прямой.

Example

В моем случаеЯ всегда хочу уменьшить угол до 5/6 от его первоначального значения, но исходный угол и расстояние между кругами являются переменными.Круги все одинакового радиуса.Фактические данные, которые мне нужны после уменьшения угла, - это вектор между новым центром динамического круга и статическим кругом, то есть синей линией в 3, 4, 6 и 7, если это облегчает вычисления.

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

Ответы [ 3 ]

1 голос
/ 24 августа 2010

Чтобы ответить на ваш короткий вопрос, если вы находитесь на декартовой плоскости, то найдите уравнение прямой, на которой находится L (учитывая две конечные точки L, это просто).Найдите уравнение перпендикуляра к указанной линии, которая проходит через P (это делается путем взятия отрицательной обратной стороны наклона, включения значений x и y P и решения для перехвата).Затем найдите точку, где две перпендикулярные линии пересекаются, используя их уравнения как единую систему уравнений (с равными x и y).Затем найдите расстояние между точкой пересечения и точкой P, которая является одной ногой треугольника.Наконец, с указанным расстоянием и расстоянием X используйте теорему Пифагора, чтобы найти расстояние до другого отрезка треугольника.Теперь точка, которую вы ищете, это точка на L, а также на линии, на которой находится L.Таким образом, используя только что полученное расстояние, точку пересечения, которую вы нашли ранее, и уравнение линии L, вы можете найти координаты нужной точки.Таких точек может быть максимум 2, поэтому все, что вам нужно проверить, это то, находятся ли на самом деле координаты найденных точек на L или за L, но все еще на его линии.Извините за длинный ответ и если вам нужно геометрическое объяснение, а не алгебраическое.

1 голос
/ 24 августа 2010

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

0 голосов
/ 24 августа 2010

Пусть концы вашего отрезка будут A и B, а центр вашего неподвижного круга будет C.Пусть радиус обеих окружностей будет r.Пусть центр движущегося круга в момент столкновения будет D.У нас есть треугольник ACD, из которого мы знаем: расстояние AC, потому что оно постоянное, угол DAC, потому что это то, что вы меняете, и расстояние CD, которое точно равно 2r,Теоретически, две стороны и угол должны позволить вам получить все остальное в треугольнике ...

...