Existem tamanhos de bloco hexadecimal em que largura e altura são números inteiros?

8

Estou tentando descobrir a largura e a altura ideais (em pixels) para começar a construir blocos hexadecimais para o desenvolvimento de jogos. Minha preferência é por grades hexagonais "planas", mas a matemática é semelhante para ambas.

Estou procurando um tamanho de bloco "ideal" que permita que a largura e a altura do bloco sejam um número de pixel arredondado, com base no fato de que height = sqrt(3)/2 * width.

Como minhas habilidades matemáticas eram praticamente inexistentes, apenas executei um script de força bruta que percorreu larguras de 1 a 1024 e não apresentou um único valor para wonde hestava um número inteiro. É este realmente o caso? Como alguém cria blocos hexadecimais perfeitos para pixels se não há tamanho uniforme de largura e altura que possa acomodar uma proporção perfeita de aspecto hexadecimal?

Tom Auger
fonte
7
Isso não é importante para o jogo. É uma forma de procrastinação. Se for muito importante para você, procure a correspondência mais próxima, em vez de um ajuste real.
AturSams
11
Você disse "pixel", certo? Então você está falando sobre programação? Internamente, você trabalhava com ints para dizer em qual célula você está (deve haver recursos on-line sobre grades hexagonais) e o desenho das linhas será feito pelo computador. (Pense: Você não pode desenhar um círculo, também.)
leewz
11
Se você é do tipo curioso, leia isso de todos os modos, onde diz "Prova por descida infinita". Apenas Ctrl + f para encontrá-lo.
AturSams
11
@Zehelvion haha ​​e AGORA eu sei o que você quer dizer com "procrastinação" - passo as últimas 2 horas raspando os números irracionais e não criando um jogo baseado em blocos hexagonais.
Tom Auger
11
Isso deve ser um iaque, já que o velo continua quando representado decimalmente e nunca repete o mesmo padrão (na verdade). Não me lembrava daquela referência de Ren & Stimpy; é bom saber. :)
AturSams

Respostas:

16

Não. √3 é um número irracional e, por definição, um número irracional não pode ser usado como uma razão entre dois números naturais (números inteiros) , como a contagem de pixels.

No entanto, não existe uma regra que diga que você deve usar hexágonos ideais nas peças do seu jogo. Se você o aproximar de perto e evitar erros de cálculo que possam resultar, o que você pode fazer com matemática inteira de qualquer maneira, poderá obter um produto de boa aparência enquanto trabalha com números fáceis nos bastidores (se você pode chamar de fácil 100 e 173 trabalhar com).

Seth Battin
fonte
Bom, mas √3 é o número irracional sqrt(3)=1.7320508075688772é (digamos) a doublee certamente pode ser expresso como uma razão de números inteiros (138907099/80198051).
Sean D
@SeanD Qualquer número representado como duplo ou flutuante é um número racional. Não vejo para onde você está indo com isso?
AturSams
NaNs são doubles, mas não são racionais. A resposta afirma que " sqrt(3)é um número irracional", que é falso no contexto da programação. Eu estava tentando fazer uma distinção entre números de computadores e números reais.
Sean D
@SeanD Bom ponto, os computadores armazenam uma aproximação racional próxima dos números irracionais. De fato, para a maioria dos números racionais, os computadores também armazenam uma aproximação racional estreita. Então você pode ter um hexágono "perfeito" em termos de precisão limitada do computador. Só podemos armazenar 2 ^ (numOfBits) de números possíveis na memória e há uma quantidade infinita de números racionais entre 0 .. 1, sem falar em números irracionais dos quais há uma quantidade infinita maior.
AturSams
2
Obrigado por localizar o caractere √ para mim; Vou incorporá-lo à minha resposta para que não precisemos discutir sobre a precisão do ponto flutuante.
Seth Battin
4

Apenas no caso de alguém estar interessado:

Vamos supor que o sqrt (3) seja racional:

  1. Portanto, deve haver dois números inteiros ae btais que a/b= sqrt (3)
  2. Assumimos estes números são primos entre si, se eles têm um fator comum, dividimos por ela produzir um par coprime, aeb
  3. Nós sabemos disso (a/b)^2 = 3e, portanto a^2 = 3 * b^2.
  4. 3 * b^2é divisível por 3 como b^2é integral e, portanto, a^2também é divisível por 3.
  5. Não há números inteiros, o quadrado é divisível por 3, mas eles não são. então segue que aele próprio é divisível por 3. Vamos definir k = a/3.
  6. a^2 = (3k)^2 = 3 * b^2=> 9 * k^2 = 3 * b^2=> o 3 * k^2 = b^2que significa que btambém é divisível por 3.
  7. Isso contradiz a suposição básica de que eles são inteiros de coprime.

Créditos à wikipedie por refrescar minha memória.

AturSams
fonte
Mostrar! ;-) 1 para atualizar o meu memoey
Pieter Geerkens
@PieterGeerkens :) obrigado, consegui me lembrar de metade dele (do Cálculo 1), mas depois descobri que era explicado muito bem no wiki.
AturSams
1

Muitas respostas complexas aqui. Se você estiver procurando por uma resposta "Perto o suficiente", tente 7x8. Não é um hexágono perfeito, mas perto o suficiente para que a maioria das pessoas não perceba a diferença.

GB silencioso
fonte