Столкновение между кругами легко. Представьте, что есть два круга:
- C1 с центром (x1, y1) и радиусом r1;
- C2 с центром (x2, y2) и радиусом r2.
Представьте, что между этими двумя центральными точками проходит линия. Расстояние от центральных точек до края любой окружности по определению равно их соответствующим радиусам. Итак:
- если края окружностей касаются, расстояние между центрами будет r1 + r2;
- большее расстояние, и круги не касаются и не сталкиваются; и
- чуть меньше, а потом сталкиваются.
Таким образом, вы можете обнаружить столкновение, если:
(x2-x1)^2 + (y1-y2)^2 <= (r1+r2)^2
означает, что расстояние между центральными точками меньше суммы радиусов.
Тот же принцип может применяться для обнаружения столкновений между сферами в трех измерениях.
Редактировать: Если вы хотите вычислить точку столкновения, некоторые основные тригонометрии могут сделать это. У вас есть треугольник:
(x1,y1)
|\
| \
| \ sqrt((x2-x1)^2 + (y2-y1)^2) = r1+r2
|y2-y1| | \
| \
| X \
(x1,y2) +------+ (x2,y2)
|x2-x1|
Выражения |x2-x1|
и |y2-y1|
являются абсолютными значениями. Итак, для угла X:
|y2 - y1|
sin X = -------
r1 + r2
|x2 - x1|
cos X = -------
r1 + r2
|y2 - y1|
tan X = -------
|x2 - x1|
Получив угол, вы можете рассчитать точку пересечения, применив их к новому треугольнику:
+
|\
| \
b | \ r2
| \
| X \
+-----+
a
где:
a
cos X = --
r2
так
a = r2 cos X
Из предыдущих формул:
|x2 - x1|
a = r2 -------
r1 + r2
Если у вас есть a и b, вы можете рассчитать точку столкновения с точки зрения смещения (x2, y2) на (a, b) в зависимости от ситуации. Вам даже не нужно рассчитывать какие-либо синусы, косинусы или обратные синусы или косинусы для этого. Или любые квадратные корни в этом отношении. Так что это быстро.
Но если вам не нужен точный угол или точка столкновения и вы просто хотите использовать октант, вы можете оптимизировать его дальше, поняв кое-что о касательных, а именно:
- 0 <= tan X <= 1 для 0 <= X <= 45 градусов; </li>
- tan X> = 1 для 45 <= X <= 90 </li>
- 0> = tan X> = -1 для 0> = X => -45;
- tan X <= -1 для -45> = X => -90; и
- загар X = загар (X + 180) = загар (X-180).
Эти четыре диапазона градусов соответствуют четырем октантам цирка. Остальные четыре смещены на 180 градусов. Как показано выше, касательная может быть вычислена просто как:
|y2 - y1|
tan X = -------
|x2 - x1|
Потеряйте абсолютные значения, и это отношение скажет вам, в каком из четырех октантов находится столкновение (по вышеуказанным диапазонам касательных). Чтобы определить точный октант, просто сравните x1 и x2, чтобы определить, какой из них самый левый.
Октант столкновения на другом смещении смещен (октант 1 на С1 означает октант 5 на С2, 2 и 6, 3 и 7, 4 и 8 и т. Д.).