2010-08-23 5 views
0

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

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

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

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

Example

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

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

+0

Это относится к математике StackExchange: http://math.stackexchange.com/ –

+0

Я полагаю, я мог бы сказать, что это что-то я Я пытаюсь сделать это на Java, если это имеет значение. –

ответ

1

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

1

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

+0

http://mathworld.wolfram.com/Circle-LineIntersection.html, вероятно, полезно. – phadej

0

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