Отражение круга от другого круга - PullRequest
3 голосов
/ 02 июля 2010

Работа с iPhone и Objective C.

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

Известно следующее:

  • ток шарика x, y
  • конец шара х, у
  • радиус шара
  • центр круга x, y
  • радиус круга
  • точка пересечения траектории шара и окружности x и y

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

Ответы [ 2 ]

4 голосов
/ 02 июля 2010

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

Если радиус окружности равен R , а радиусшар равен r , все упрощается, если перейти к случаю, когда круг имеет радиус R + r , а шар имеет радиус 0. Для целей обнаружения столкновений и отражения / отражения, это эквивалентно.

Если у вас есть точка пересечения (увеличенного) круга и траектории мяча, вы можете легко вычислить нормальную N для круга в этой точке (это- единичный вектор в направлении от центра круга к точке столкновения).

Для входящего вектора V отраженный вектор равен V -2 ( N V ) N , где ( N V ) - точечное произведение.Для этой задачи входящий вектор V является вектором от точки пересечения до точки внутри окружности.

Что касается приведенной выше формулы отражения, ее относительно легко вывести с использованием вектораматематику, но вы также можете искать в Google такие термины, как " вычислить вектор отражения ".Знаки в формуле будут меняться с предполагаемыми направлениями V и N . Математический мир имеет происхождение , хотя, как уже отмечалось, знаки разные.

0 голосов
/ 15 января 2013

Я знаю только решение геометрической части.
Позвольте:
r1 => Радиус шара
r2 => Радиус круга

Вы можете рассчитатьрасстояние между двумя кругами, используя теорему Пифагора.
Если расстояние меньше, чем r1 + r2, тогда выполните столкновение.

Для столкновения я бы отослал вас Здесь .Это на python, но я думаю, что это должно дать вам представление о том, что делать.Надеюсь, даже реализовать это в Objective C. Учебное пособие PeterCollingRidge .

...