As grades quadradas ou hexagonais são melhores para encontrar caminhos?


17

Existe alguma diferença significativa entre o uso de uma grade quadrada ou hexagonal para a área pesquisada por um algoritmo de localização de caminho. Em outras palavras, é quadrado ou hexagonal melhor e, em caso afirmativo, por quê.


4
Acho que você deve usar o que melhor se adequa à sua jogabilidade;)
Andrew Russell

Respostas:


19

A principal consideração para decidir se as grades quadradas e hexadecimais devem ser fáceis de implementar na IA - os algoritmos de busca em primeiro e segundo em profundidade são praticamente os mesmos, independentemente do tipo de gráfico que você possui.

Pelo contrário, esta é uma questão de jogabilidade que deve ser considerada pelos designers do jogo. As grades quadradas são mais acessíveis ao mercado de massa (placas hexadecimais tendem a parecer "nerds") e, em um mundo de controles para cima / baixo / esquerda / direita, é muito mais intuitivo navegar por quadrados do que hexágonos do ponto de vista da interface do usuário. As grades quadradas também tendem a restringir um pouco mais o movimento; assumindo movimento ortogonal (e não diagonal), são necessários 4 movimentos para contornar um obstáculo de um quadrado, em comparação com 3 movimentos em uma grade hexagonal. Do ponto de vista da programação, os hexágonos também são um pouco mais fáceis de implementar, mas não se trata de algoritmos de pesquisa, pois uma grade quadrada é igual a uma matriz bidimensional, mas uma grade hexadecimal não é realmente mapeada para uma estrutura de dados padrão.

O lado negativo das grades quadradas é que o movimento nunca parece certo. Mover na diagonal deve levar pontos de movimento sqrt (2), mas, na prática, é 1 movimento (o que faz parecer que andar nas diagonais é rápido e raramente há uma razão para caminhar ortogonalmente) ou 2 movimentos (o que faz o movimento diagonal parecer muito lento ) Com grades hexagonais, a distância do movimento é muito mais intuitiva, pois é sempre a mesma distância de um hexágono para outro, independentemente do caminho que você seguir.


4
+1. Esta é uma decisão de design, não uma decisão de IA. Se você deseja grades hexagonais, uma grade quadrada offset como www-cs-students.stanford.edu/~amitp/game-programming/grids/… pode ser menos intimidadora para jogadores casuais, e é matematicamente equivalente a hexágonos. Além disso, também é uma representação conveniente na memória.

2
+1 para a frase "As grades quadradas são mais acessíveis ao mercado de massa (placas hexagonais tendem a parecer" nerds ")": D
Kornel Kisielewicz 06/09/10

Edwin não está perguntando o que é melhor em um jogo baseado em grade. Ele está perguntando o que é melhor para a IA usar quadrados ou hexágonos. O mundo e a jogabilidade em si não precisam ser limitados a eles, apenas aos nós que a IA está pesquisando.
AttackingHobo

Implementei jogos de estratégia baseados em turnos com grades hexagonais e quadradas, e não há absolutamente nenhuma diferença necessária em termos de complexidade de busca de caminhos. Eu até mudei um jogo de um mapa hexadecimal para um mapa quadrado e (além da renderização) a única alteração que tive que fazer foi no método MapLocation :: GetDistance () que calculava a distância entre dois setores. Eu simplesmente tive que ajustar os cálculos para lidar com todas as outras linhas sendo ligeiramente deslocadas. Nos dois casos, você pode usar a mesma representação na memória. Então, como os outros disseram, é realmente uma questão de design.
Mike Strobel

4
Apenas um aparte, hexágonos podem ser mapeados para uma matriz bidimensional. Imagine uma grade quadrada e, em seguida, mude todas as colunas pares meio passo abaixo. Você tem uma grade quadrada deslocada agora, que é isomórfica a uma grade hexadecimal.
Asmor

3

Eu não sou um especialista em IA de forma alguma, mas a diferença deve ser insignificante. As grades quadradas são um pouco mais rápidas (4 conexões por nó em vez de 6), mas esse realmente não é o fator limitante no tempo de execução algorítmico. Dependendo do algoritmo que você planeja usar, o código pode ser um pouco mais complexo para uma grade hexadecimal, já que é um pouco mais complicado calcular coordenadas e é mais difícil usar o tipo de atalho quadtree / octree que acredito que sejam frequentemente usado na busca de caminhos.

Mas para um mundo simples como um nível de jogo baseado em turnos, a diferença entre os dois layouts não deve importar muito; uma grade quadrada será um pouco mais simples e mais rápida.


5
"Grades quadradas são um pouco mais rápido (4 conexões por nó em vez de 6)" - a menos que você pode viajar ao longo diagonais, caso em que ele é 8 conexões vs 6.
Ian Schreiber

Toque. Você está totalmente certo; é claro que conexões diagonais seriam prováveis.
Gregory Avery-Weir

3

Há uma diferença prática em que posso pensar em relação ao planejamento de caminhos. Atravessar do centro de uma célula hexadecimal para uma de suas vizinhas é sempre a mesma distância, enquanto que, se você permitir um deslocamento diagonal, isso não se aplica aos quadrados.


0

Este guia sobre hexágonos é incrível. A parte sobre o pathfinding tem um exemplo interativo e algumas informações sobre como adaptar o square pathfinding.

Se você estiver usando o pathfinding baseado em gráfico, como o algoritmo A * ou Dijkstra ou o Floyd-Warshall, o pathfinding em grades hexagonais não é diferente do pathfinding em grades quadradas.

  • Vizinhos. O código de exemplo que forneço no tutorial de busca de caminhos chama graph.neighbors para obter os vizinhos de um local. Use a função na seção vizinhos para isso. Filtrar os vizinhos que são intransitáveis.
  • Heurística. O código de exemplo para A * usa uma função heurística que fornece uma distância entre dois locais. Use a fórmula da distância, dimensionada para corresponder aos custos de movimentação. Por exemplo, se seu custo de movimento for 5 por hexadecimal, multiplique a distância por 5.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.