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


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. Это противоречит базовому предположению, что они являются простыми целыми числами.

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


Выпендриваться! ;-) +1 за обновление моей записки
Питер Гиркенс

@PieterGeerkens :) спасибо, мне удалось вспомнить половину (из Исчисления 1), но потом оказалось, что это очень хорошо объяснено в вики.
AturSams

1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.