幅と高さの両方が整数である六角タイルサイズはありますか?


8

ゲーム開発用の16進タイルの作成を開始するための最適な幅と高さ(ピクセル単位)を把握しようとしています。私の好みは、「フラットトップ」の16進グリッドですが、数学はどちらも似ています。

という事実に基づいて、タイルの幅と高さの両方を丸められたピクセル数にすることができる「最適な」タイルサイズを探していheight = sqrt(3)/2 * widthます。

私の数学のスキルは事実上存在せず、1から1024までの幅を実行するブルートフォーススクリプトを実行しただけで、整数wがどこhであるかについて単一の値が得られませんでした。これは本当ですか?完全な六角形のアスペクト比に対応できる幅と高さのサイズがない場合、ピクセルパーフェクトな六角形タイルを作成するにはどうすればよいですか?


7
これはゲームプレイにとって重要ではありません。それは先延ばしの形です。非常に重要な場合は、実際の適合度ではなく、最も近い一致を探します。
AturSams 2014年

1
あなたは「ピクセル」と言いましたよね?あなたはプログラミングについて話しているのですか?内部的には、intを使用して現在のセル(16進グリッドに関するオンラインリソースが存在する必要があります)を示し、線の描画はコンピューターによって行われます。(考えてみてください:円を描くこともできません。)
leewz 2014年

1
あなたが好奇心の強いタイプなら、「無限の降下による証明」と書かれているところで必ずこれ読んでください。Ctrl + fで検索してください。
AturSams 2014年

1
@Zehelvion母と私はあなたが「粗末化」によってあなたが何を意味するかを知っています-私は過去2時間を過激な数のyakを剃っており、16進タイルベースのゲームを作成していません。
Tom Auger

1
そのフリースは10進数で表されるときに何度も繰り返し、同じパターンを(実際に)繰り返すことはないため、これはかなりヤクであるに違いありません。Ren&Stimpyからの参照を覚えていません。知っておくと便利です。:)
AturSams 2014年

回答:


16

いいえ。√3は無理数であり、定義上、無理数はピクセル数などの2つの自然数(整数)の比率として使用できません。

ただし、ゲームタイルで理想的な六角形を使用する必要があるというルールはありません。密接に近似し、結果として発生する可能性のある誤算を回避すると、整数演算でとにかくできるので、舞台裏で簡単な数値を処理しながら見栄えの良い製品を得ることができます(100と173を簡単に呼び出すことができる場合)を使用して)。


いいですが、√3はsqrt(3)=1.7320508075688772(たとえば)a doubleであり、整数の比率(138907099/80198051)として表現できます。
Sean D

@SeanD doubleまたはfloatとして表される数値はすべて有理数です。どこへ行くのか分からないの?
AturSams 2014年

NaNはですがdoubles、合理的ではありません。その答えsqrt(3)は、プログラミングの文脈では誤りである「不合理な数である」と主張しています。私はコンピュータの数と実際の数を区別しようとしていました。
Sean D

@SeanD良い点は、コンピューターは無理数の厳密な有理近似を保存することです。実際、ほとんどの有理数の場合、コンピューターは厳密な有理近似も保存します。したがって、コンピューターの精度が限られているという点で、「完全な」六角形を作成できます。メモリ内に格納できる数は2 ^(numOfBits)のみであり、0 .. 1の間の無限数の有理数があります。さらに、無限量の大きい無理数はありません。
AturSams 2014年

2
√キャラクターを見つけてくれてありがとう。私はそれを私の回答に組み込んで、浮動小数点の精度について議論する必要がないようにします。
セスバティン

4

誰かが興味を持っている場合に備えて:

sqrt(3)が合理的であると仮定しましょう:

  1. したがって、2つの整数が存在しなければならないabするように、a/b = SQRT(3)
  2. これらの数は素数であると仮定し、それらに共通の因子がある場合は、それを除算して素数のペアを生成します。 aそしてb
  3. 私達はことを知っています (a/b)^2 = 3のでa^2 = 3 * b^2
  4. 3 * b^2b^2積分であるので3で見えないため、a^2 3で不可視な、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. これは、それらが互いに素な整数であるという基本的な仮定に反しています。

私の記憶をリフレッシュするためのwikipedieへのクレジット。


見せびらかす!;-)追記をリフレッシュするための+1
Pieter Geerkens 2014年

@PieterGeerkens :)おかげで、(微積分1からの)半分は覚えていましたが、wikiでうまく説明されていることがわかりました。
AturSams 2014年

1

ここにはたくさんの複雑な答えがあります。「十分に近い」答えを探している場合は、7x8を試してください。完全な六角形ではありませんが、ほとんどの人がその違いに気付かないほど近くにあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.