Inicialmente, experimentei implementar a interseção retangular, que funciona bem. No entanto, quando preciso aplicar o sistema de física, como velocidade, aceleração e vetores direcionais, precisaria encontrar uma maneira de determinar qual lado dos retângulos colide. Agora, no meu sistema, não há retângulo girado, então isso simplificou o problema. No entanto, não consegui encontrar uma maneira fácil de determinar qual lado do retângulo colidiu. Já lidei com esse problema antes, mas falhei miseravelmente.
O que fiz no passado foi determinar a distância entre os lados retangulares paralelos e verificar se a distância é próxima de 0 (use alguma faixa de distância definida inicialmente) ou é 0. No entanto, para aritmética de ponto flutuante, isso se mostra instável porque de tempo desconhecido decorrido. Em algum momento, os retângulos se cruzariam antes de atingir o intervalo definido.
Por outro lado, eu estava pensando em gerar vários retângulos, cada retângulo para cada lado. No entanto, depois de pensar novamente, seria o mesmo que ter um lado paralelo com a verificação da faixa de distância, apenas que essa faixa de distância é a largura de cada mini-retângulo.
Portanto, alguma sugestão para esse problema?
fonte
Respostas:
Adaptado da minha resposta para "Qual lado foi atingido?" :
Eu sugiro computar o soma de Minkowski de B e A, que é um novo retângulo, e verificar onde o centro do retângulo A se encontra relativamente ao novo retângulo (para saber se uma colisão está acontecendo) e às suas diagonais (para saber onde a colisão está) está acontecendo):
fonte