Существуют ли размеры шестигранных плиток, где ширина и высота являются целыми числами?

8

Я пытаюсь определить оптимальную ширину и высоту (в пикселях), чтобы начать строить шестигранные плитки для разработки игр. Я предпочитаю шестигранные сетки с «плоской вершиной», но математика одинакова для обоих.

Я ищу «оптимальный» размер плитки, который позволяет ширине и высоте плитки быть округленным числом пикселей, основываясь на том факте, что height = sqrt(3)/2 * width.

Мои математические навыки будучи практически не существует, я просто побежал сценарий грубой силы , которая пробежала по ширине от 1 до 1024 и не придумать с одним значением , wгде hбыло целое. Это действительно так? Как кто-нибудь может создать пиксельные шестнадцатеричные плитки, если нет равных ширины и высоты, которые могли бы соответствовать идеальному соотношению сторон в шестнадцатеричном формате?

Том Оже
источник
7
Это не важно для игрового процесса. Это форма промедления. Если это очень важно для вас, ищите наиболее близкое совпадение вместо фактического соответствия.
AturSams
1
Вы сказали "пиксель", верно? Так ты говоришь о программировании? Внутренне вы должны работать с целыми числами, чтобы сказать, в какой ячейке вы находитесь (должны быть онлайн-ресурсы о шестнадцатеричных сетках), и рисование линий будет выполняться компьютером. (Подумайте: вы тоже не можете нарисовать круг.)
leewz
1
Если вы любопытный тип, непременно прочитайте это, где написано «Доказательство бесконечного спуска». Просто Ctrl + F, чтобы найти его.
AturSams
1
@ Zehelvion, ха-ха, и СЕЙЧАС я знаю, что вы подразумеваете под "прокрастинацией" - я просто провожу последние 2 часа, брея иррациональные числа , а не создавая игру на основе гекс-плитки.
Том Ожер
1
Это должен быть настоящий як, так как его флис продолжается и повторяется в десятичном виде и никогда не повторяет один и тот же образец (на самом деле). Я не помню эту ссылку от Рена и Стимпи; это хорошо знать. :)
AturSams

Ответы:

16

Нет. √3 - иррациональное число , и по определению иррациональное число не может использоваться как отношение между двумя натуральными числами (целыми числами), такими как число пикселей.

Тем не менее, нет правила, согласно которому вы должны использовать идеальные шестиугольники в своих игровых фишках. Если вы приблизитесь к нему и избежите любых просчетов, которые могут привести к этому, что вы все равно должны быть в состоянии сделать с целочисленной математикой, вы можете получить красивый продукт, работая с простыми закулисными числами (если вы можете легко набрать 100 и 173). работать с).

Сет Баттин
источник
Хорошо, но √3 - это иррациональное число sqrt(3)=1.7320508075688772(скажем) a double, и оно, безусловно, может быть выражено как отношение целых чисел (138907099/80198051).
Шон Д
@SeanD Любое число, представленное как двойное число или число с плавающей точкой, является рациональным числом. Я не понимаю, куда ты идешь с этим?
AturSams
NaNс doubles, но они не рациональны. Ответ утверждает, что « sqrt(3)это иррациональное число», что неверно в контексте программирования. Я пытался провести различие между числами компьютеров и действительными числами.
Шон Д
@SeanD Хорошо, компьютеры хранят близкое рациональное приближение иррациональных чисел. Фактически, для большинства рациональных чисел компьютеры сохраняют также близкое рациональное приближение. Таким образом, вы можете иметь «идеальный» шестиугольник с точки зрения ограниченной компьютерной точности. Мы можем хранить только 2 ^ (numOfBits) возможных чисел в памяти, и между 0 ... 1 существует бесконечное количество рациональных чисел, не говоря уже о иррациональных числах, которых бесконечно больше.
AturSams
2
Спасибо, что нашли для меня символ √; Я включу это в свой ответ, поэтому нам не нужно спорить о точности с плавающей запятой.
Сет Бэттин
4

На всякий случай кому-то интересно

Предположим, что sqrt (3) является рациональным:

  1. Следовательно, должно быть два целых числа aи bтакое, что a/b= sqrt (3)
  2. Мы предполагаем, что эти числа взаимно просты, если они имеют общий множитель, мы делим на него, получая простую пару, aиb
  3. Мы знаем это (a/b)^2 = 3и поэтому a^2 = 3 * b^2.
  4. 3 * b^2делится на 3 как b^2целое и, следовательно a^2, также делится на 3.
  5. Здесь нет целых чисел, квадрат делится на 3, но их нет. Отсюда следует, что aсамо делится на 3. Давайте определимся k = a/3.
  6. a^2 = (3k)^2 = 3 * b^2=> 9 * k^2 = 3 * b^2=> 3 * k^2 = b^2что означает, что bтакже делится на 3.
  7. Это противоречит базовому предположению, что они являются простыми целыми числами.

Кредиты в Википедии для обновления моей памяти.

AturSams
источник
Выпендриваться! ;-) +1 за обновление моей записки
Питер Гиркенс
@PieterGeerkens :) спасибо, мне удалось вспомнить половину (из Исчисления 1), но потом оказалось, что это очень хорошо объяснено в вики.
AturSams
1

Здесь много сложных ответов. Если вы ищете ответ «достаточно близко», попробуйте 7x8. Не идеальный шестиугольник, но достаточно близко, чтобы большинство людей не заметили разницу.

GB Silent
источник