Я пытаюсь определить оптимальную ширину и высоту (в пикселях), чтобы начать строить шестигранные плитки для разработки игр. Я предпочитаю шестигранные сетки с «плоской вершиной», но математика одинакова для обоих.
Я ищу «оптимальный» размер плитки, который позволяет ширине и высоте плитки быть округленным числом пикселей, основываясь на том факте, что height = sqrt(3)/2 * width
.
Мои математические навыки будучи практически не существует, я просто побежал сценарий грубой силы , которая пробежала по ширине от 1 до 1024 и не придумать с одним значением , w
где h
было целое. Это действительно так? Как кто-нибудь может создать пиксельные шестнадцатеричные плитки, если нет равных ширины и высоты, которые могли бы соответствовать идеальному соотношению сторон в шестнадцатеричном формате?
источник
Ответы:
Нет. √3 - иррациональное число , и по определению иррациональное число не может использоваться как отношение между двумя натуральными числами (целыми числами), такими как число пикселей.
Тем не менее, нет правила, согласно которому вы должны использовать идеальные шестиугольники в своих игровых фишках. Если вы приблизитесь к нему и избежите любых просчетов, которые могут привести к этому, что вы все равно должны быть в состоянии сделать с целочисленной математикой, вы можете получить красивый продукт, работая с простыми закулисными числами (если вы можете легко набрать 100 и 173). работать с).
источник
sqrt(3)=1.7320508075688772
(скажем) adouble
, и оно, безусловно, может быть выражено как отношение целых чисел (138907099/80198051).NaN
сdoubles
, но они не рациональны. Ответ утверждает, что «sqrt(3)
это иррациональное число», что неверно в контексте программирования. Я пытался провести различие между числами компьютеров и действительными числами.На всякий случай кому-то интересно
Предположим, что sqrt (3) является рациональным:
a
иb
такое, чтоa/b
= sqrt (3)a
иb
(a/b)^2 = 3
и поэтомуa^2 = 3 * b^2
.3 * b^2
делится на 3 какb^2
целое и, следовательноa^2
, также делится на 3.a
само делится на 3. Давайте определимсяk = a/3
.a^2 = (3k)^2 = 3 * b^2
=>9 * k^2 = 3 * b^2
=>3 * k^2 = b^2
что означает, чтоb
также делится на 3.Кредиты в Википедии для обновления моей памяти.
источник
Здесь много сложных ответов. Если вы ищете ответ «достаточно близко», попробуйте 7x8. Не идеальный шестиугольник, но достаточно близко, чтобы большинство людей не заметили разницу.
источник