Apakah ada ukuran hex tile di mana lebar dan tinggi adalah bilangan bulat?

8

Saya mencoba mencari lebar dan tinggi (dalam piksel) yang optimal untuk mulai membangun ubin hex untuk pengembangan game. Preferensi saya adalah untuk kisi hex "datar atasnya", tetapi perhitungannya sama untuk keduanya.

Saya mencari ukuran ubin "optimal" yang memungkinkan lebar dan tinggi ubin menjadi angka piksel bulat, berdasarkan fakta bahwa height = sqrt(3)/2 * width.

Keterampilan matematika saya hampir tidak ada, saya hanya menjalankan skrip brute force yang membentang lebar dari 1 hingga 1024 dan tidak muncul dengan nilai tunggal untuk di wmana hbilangan bulat. Benarkah ini masalahnya? Bagaimana orang membuat ubin hex sempurna pixel jika tidak ada ukuran lebar & tinggi genap yang dapat mengakomodasi rasio aspek hex sempurna?

Tom Auger
sumber
7
Ini tidak penting untuk gameplay. Ini adalah bentuk penundaan. Jika itu sangat penting bagi Anda, cari pasangan terdekat dan bukan yang sebenarnya cocok.
AturSams
1
Anda mengatakan "pixel", kan? Jadi Anda berbicara tentang pemrograman? Secara internal, Anda akan bekerja dengan ints untuk mengatakan di mana sel Anda berada (harus ada sumber daya online tentang hex grid), dan menggambar garis akan dilakukan oleh komputer. (Pikirkan: Anda juga tidak bisa menggambar lingkaran.)
leewz
1
Jika Anda adalah tipe orang yang penasaran, maka tentu saja bacalah ini di mana dikatakan "Proof by infinite descent". Cukup Ctrl + f untuk menemukannya.
AturSams
1
@Zehelvion haha ​​dan SEKARANG Saya tahu apa yang Anda maksud dengan "penundaan" - Saya hanya menghabiskan 2 jam terakhir untuk mencukur angka-angka irasional yak , dan TIDAK membuat game berbasis hex-tile.
Tom Auger
1
Itu pasti benar-benar yak, karena bulunya terus-menerus ketika diwakili secara desimal dan tidak pernah mengulangi pola yang sama (sungguh). Saya tidak ingat referensi dari Ren & Stimpy; itu baik untuk diketahui. :)
AturSams

Jawaban:

16

√3 adalah bilangan irasional , dan menurut definisi bilangan irasional tidak dapat digunakan sebagai rasio antara dua bilangan alami (bilangan bulat) seperti jumlah piksel.

Namun, tidak ada aturan yang mengatakan Anda harus menggunakan hexagon yang ideal di ubin game Anda. Jika Anda memperkirakannya dengan cermat dan menghindari kesalahan perhitungan yang mungkin terjadi, yang harus Anda lakukan dengan matematika bilangan bulat, Anda bisa mendapatkan produk yang terlihat bagus sambil bekerja dengan angka mudah di belakang layar (jika Anda dapat memanggil 100 dan 173 dengan mudah bekerja dengan).

Seth Battin
sumber
Bagus, tetapi √3 adalah bilangan irasional sqrt(3)=1.7320508075688772adalah (katakanlah) a double, dan tentu saja dapat dinyatakan sebagai rasio bilangan bulat (138907099/80198051).
Sean D
@SeanD Angka apa pun yang direpresentasikan sebagai ganda atau float adalah angka rasional. Saya tidak melihat ke mana Anda akan pergi dengan ini?
AturSams
NaNMemang doubles, tetapi mereka tidak rasional. Jawabannya mengklaim " sqrt(3)adalah bilangan irasional" yang salah dalam konteks pemrograman, saya mencoba menggambar perbedaan antara nomor komputer dan bilangan real.
Sean D
@SeanD Poin bagusnya, komputer menyimpan perkiraan rasional dari bilangan irasional. Bahkan, untuk sebagian besar bilangan rasional, komputer juga menyimpan perkiraan rasional yang dekat. Jadi Anda bisa memiliki segi enam "sempurna" dalam hal presisi komputer terbatas. Kami hanya dapat menyimpan 2 ^ (numOfBits) dari angka-angka yang mungkin dalam memori dan ada jumlah tak terbatas dari bilangan rasional antara 0 .. 1, apalagi bilangan irasional di mana ada jumlah tak terbatas yang lebih besar.
AturSams
2
Terima kasih telah menemukan karakter √ untukku; Saya akan memasukkannya ke dalam jawaban saya sehingga kita tidak perlu berdebat tentang ketepatan floating point.
Seth Battin
4

Kalau-kalau ada yang tertarik:

Anggap sqrt (3) rasional:

  1. Oleh karena itu, harus ada dua bilangan integral adan bsedemikian sehingga a/b= sqrt (3)
  2. Kami menganggap angka-angka ini adalah koprime, jika mereka memiliki faktor yang sama, kami membaginya dengan menghasilkan pasangan coprime, adanb
  3. Kami tahu itu (a/b)^2 = 3dan karenanya a^2 = 3 * b^2.
  4. 3 * b^2dapat dibagi 3 oleh karena b^2tidak terpisahkan dan karena a^2itu juga dapat dibagi 3.
  5. Tidak ada bilangan integral kuadrat dibagi dengan 3, tetapi tidak. jadi itu berarti itu asendiri dapat dilihat oleh 3. Mari kita mendefinisikan k = a/3.
  6. a^2 = (3k)^2 = 3 * b^2=> 9 * k^2 = 3 * b^2=> 3 * k^2 = b^2yang berarti yang bjuga dapat dilihat oleh 3.
  7. Ini bertentangan dengan asumsi dasar bahwa mereka adalah bilangan bulat coprime.

Kredit ke wikipedie untuk menyegarkan ingatanku.

AturSams
sumber
Pamer! ;-) +1 untuk menyegarkan memoey saya
Pieter Geerkens
@PieterGeerkens :) terima kasih, saya berhasil mengingat setengahnya (dari Kalkulus 1) tetapi kemudian menemukan itu dijelaskan dengan sangat baik di wiki.
AturSams
1

Banyak jawaban kompleks di sini. Jika Anda mencari jawaban 'Cukup dekat', coba 7x8. Bukan segi enam yang sempurna, tetapi cukup dekat sehingga kebanyakan orang tidak akan melihat perbedaannya.

GB Diam
sumber