Столкновение легко!Прежде чем приступить к мелочам, нужно понять, как получить расстояние между двумя точками.Если вы не сделали этого раньше, это всего лишь пифаг!
Если вы изобразите две точки на плоскости (красные точки на рисунке),Наименьшее расстояние, которое нужно пройти между ними, находится непосредственно от одной точки к другой, без необходимости совершать какие-либо повороты, это расстояние между точками.На рисунке выше пусть y будет вертикальной осью, а x - горизонтальной осью.Горизонтальное расстояние между точками d и e представлено значением b.Вертикальное расстояние между точками d и e представлено значением a.Таким образом, ...
a = dy - ey
b = dx - ex
Хотя a и be могут быть отрицательными, это не имеет значения, потому что мы выстраиваем их вследующий шаг.
Чтобы получить значение c, мы должны получить квадратный корень из суммы квадратов a и b.Звучит сложно на первый взгляд, но очень просто!
Код Python Сделать это в Python просто.
c = ((a**2)+(b**2))**0.5
# a**2 is a squared
# anything to the power of 0.5 is square rooted, test it in console
# 25**0.5 = 5.0
# 5**2 = 25
Теперь у нас есть расстояние между двумя точками d и e.Допустим, d и e имеют радиус rd и re.Затем мы можем проверить, сталкивается ли окружность d с окружностью e, вычитая каждый радиус из расстояния между центром окружностей.Таким образом, c становится ...
c -= rd - re
Если c меньше или равно нулю, тогда у вас есть столкновение между кругами!
def collision(d, e, rd, re):
a = d.y-e.y
b = d.x-e.x
c = ((a**2)+(b**2))**0.5
if c > 0:
# no collision
return False
return True
Прямоугольники Прямоугольникинемного проще, чтобы проверить, находится ли точка внутри прямоугольника, все, что вам нужно, это некоторые операторы if.Пусть эти переменные представляют прямоугольник x = x location, y = y location, w = width, h = height.Предположим, вы хотите проверить, сталкивается ли точка p с прямоугольником.
def check_rect_collision(p, x, y, w, h):
if p.x >= x and p.x <= x+w and p.y >= y and p.y <= y+h:
# collision between p and rectangle
return True
return False