Existe-t-il des tailles de tuiles hexagonales où la largeur et la hauteur sont des nombres entiers?


8

J'essaie de déterminer la largeur et la hauteur optimales (en pixels) pour commencer à construire des tuiles hexagonales pour le développement du jeu. Ma préférence va aux grilles hexagonales "à sommet plat", mais les calculs sont similaires pour les deux.

Je recherche une taille de tuile "optimale" qui permette à la fois la largeur et la hauteur de la tuile d'être un nombre de pixels arrondis, basé sur le fait que height = sqrt(3)/2 * width.

Mes compétences en mathématiques étant pratiquement inexistantes, je viens d'exécuter un script de force brute qui s'étendait sur des largeurs de 1 à 1024 et n'a pas trouvé de valeur unique pour whétait un entier. Est-ce vraiment le cas? Comment peut-on créer des carreaux hexagonaux parfaits en pixels s'il n'y a pas de largeur et de hauteur égales pouvant accueillir un rapport d'aspect hexadécimal parfait?


7
Ce n'est pas important pour le gameplay. C'est une forme de procrastination. Si c'est très important pour vous, recherchez le match le plus proche au lieu d'un ajustement réel.
AturSams

1
Vous avez dit "pixel", non? Vous parlez donc de programmation? En interne, vous travailleriez avec des caractères pour dire dans quelle cellule vous vous trouvez (il devrait y avoir des ressources en ligne sur les grilles hexadécimales), et le dessin des lignes sera fait par l'ordinateur. (Pensez: vous ne pouvez pas non plus dessiner de cercle.)
leewz

1
Si vous êtes un type curieux, lisez-le par tous les moyens, où il est dit "Preuve par descente infinie". Il suffit de Ctrl + f pour le trouver.
AturSams

1
@Zehelvion haha ​​et MAINTENANT, je sais ce que vous entendez par "procrastination" - je viens de passer les 2 dernières heures à raser les nombres irrationnels , et à ne PAS créer un jeu basé sur des tuiles hexagonales.
Tom Auger

1
Cela doit être tout à fait un yak, car sa toison continue indéfiniment lorsqu'elle est représentée décimale et ne répète jamais (vraiment) le même motif. Je ne me souvenais pas de cette référence de Ren & Stimpy; c'est bon à savoir. :)
AturSams

Réponses:


16

Non. √3 est un nombre irrationnel , et par définition, un nombre irrationnel ne peut pas être utilisé comme un rapport entre deux nombres naturels (entiers) tels que le nombre de pixels.

Cependant, aucune règle ne dit que vous devez utiliser des hexagones idéaux dans vos tuiles de jeu. Si vous vous en approchez de près et évitez les erreurs de calcul qui pourraient en résulter, ce que vous devriez de toute façon être capable de faire avec des mathématiques entières, vous pouvez obtenir un bon produit tout en travaillant avec des nombres faciles en arrière-plan (si vous pouvez appeler 100 et 173 facile travailler avec).


Bien, mais √3 est le nombre irrationnel sqrt(3)=1.7320508075688772est (disons) a double, et peut certainement être exprimé comme un rapport d'entiers (138907099/80198051).
Sean D

@SeanD Tout nombre représenté par un double ou un flottant est un nombre rationnel. Je ne vois pas où tu vas avec ça?
AturSams du

NaNs le sont doubles, mais ils ne sont pas rationnels. La réponse prétend " sqrt(3)est un nombre irrationnel" ce qui est faux dans le contexte de la programmation, j'essayais de faire une distinction entre les nombres informatiques et les nombres réels.
Sean D

@SeanD Bon point, les ordinateurs stockent une approximation rationnelle étroite des nombres irrationnels. En fait, pour la plupart des nombres rationnels, les ordinateurs stockent également une approximation rationnelle étroite. Vous pourriez donc avoir un hexagone «parfait» en termes de précision informatique limitée. Nous ne pouvons stocker que 2 ^ (numOfBits) de nombres possibles dans la mémoire et il y a une quantité infinie de nombres rationnels entre 0 .. 1, sans parler des nombres irrationnels dont il y a une plus grande quantité infinie.
AturSams

2
Merci d'avoir localisé le caractère √ pour moi; Je vais l'intégrer dans ma réponse afin que nous n'ayons pas à discuter de la précision en virgule flottante.
Seth Battin

4

Juste au cas où quelqu'un serait intéressé:

Supposons que sqrt (3) soit rationnel:

  1. Par conséquent, il doit y avoir deux nombres entiers aet btels que a/b= sqrt (3)
  2. Nous supposons que ces nombres sont des nombres premiers, s'ils ont un facteur commun, nous divisons par lui en produisant une paire de nombres premiers, aetb
  3. Nous le savons (a/b)^2 = 3et donc a^2 = 3 * b^2.
  4. 3 * b^2est divisible par 3 comme b^2est intégrale et a^2est donc également divisible par 3.
  5. Il n'y a pas de nombres entiers carrés est divisible par 3, mais ils ne le sont pas. il s'ensuit que alui - même est divisible par 3. Permet de définir k = a/3.
  6. a^2 = (3k)^2 = 3 * b^2=> 9 * k^2 = 3 * b^2=> 3 * k^2 = b^2ce qui signifie que cela best également divisible par 3.
  7. Cela contredit l'hypothèse de base selon laquelle il s'agit d'entiers premiers entre eux.

Crédits à wikipedie pour rafraîchir ma mémoire.


Frimer! ;-) +1 pour rafraîchir mon mémo
Pieter Geerkens

@PieterGeerkens :) merci, j'ai réussi à m'en souvenir de la moitié (du calcul 1) mais j'ai trouvé que cela était très bien expliqué dans le wiki.
AturSams

1

Beaucoup de réponses complexes ici. Si vous cherchez une réponse «assez proche», essayez 7x8. Pas un hexagone parfait, mais suffisamment proche pour que la plupart des gens ne remarquent pas la différence.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.