material-aulas
material-aulas copied to clipboard
Escrever sobre 'colisões'
Colision detection é um material imenso... tem um site inteiro de referência, não tou lembrando agora
Esse site é demais! Precisamos traduzir uns exemplos: http://www.jeffreythompson.org/collision-detection/
Colisão de dois retângulos:
def rect_on_rect(r1x, r1y, r1w, r1h, r2x, r2y, r2w, r2h):
# via http://jeffreythompson.org/collision-detection/rect-rect.php
return (r1x + r1w >= r2x and # r1 right edge past r2 left
r1x <= r2x + r2w and # r1 left edge past r2 right
r1y + r1h >= r2y and # r1 top edge past r2 bottom
r1y <= r2y + r2h)
Retângulo dentro de área:
def rect_in_area(xm, ym, wm, hm, xa, ya, wa, ha):
return (xa < xm < xa + wa - wm and
ya < ym < ya + ha - hm)
Para calcular colisão entre muitas partículas, o truque para não checar duas vezes a colisão é algo assim:
(dica do @introscopia)
int N = particulas.length();
for( int i = 0; i < N; ++i ){
for( int j = i+1; j < N; ++j ){
checagem(particulas[i], particulas[j]);
}
}
Em Python talvez algo assim (preciso testar):
for i, particula in enumerate(particulas):
for outra in particulas[i + 1:]:
checagem(particula, outra)
Se você estiver 'dentro da partícula':
def checa_com_outras(self):
for outra in particulas:
if outra is self: break
else: self.checagen(outra) # ou checagem(self, outra)