Saat memetakan permukaan bola dengan ubin, bagaimana Anda bisa menangani distorsi kutub?

24

Sangat mudah untuk berurusan dengan cara lokasi berinteraksi pada jaringan Cartesius yang bersih. Ini hanya matematika vanila. Dan Anda bisa mengabaikan geometri permukaan bola untuk sekelompok itu jika Anda hanya ingin memotong kutub atau sesuatu. Tapi saya terus menghasilkan ide untuk game di mana ruang kutub penting. ARG berkode geo dan roguelike global dan lainnya.

Saya ingin lokasi persegi (ish?) - Lagipula cukup mewakili ubin persegi dengan ukuran yang sama di seluruh dunia.

Ini harus menjadi masalah yang diselesaikan, bukan?

Apa solusinya?

ETA:

Di khatulistiwa - dan dengan asumsi bahwa lokasi kuadrat Anda cukup kecil, itu cukup dekat untuk benar bahwa Anda bisa lolos dengan memiliki satu kuadrat di baris utara dan selatan dari baris paling khatulistiwa. Dan Anda mungkin bisa lolos dengan hanya mengayunkan perbedaan hingga sekitar 45 derajat. Tetapi pada akhirnya, Anda harus memiliki lebih sedikit kotak di baris keliling kutub-bangsal. Jika saya mengurangi panjang baris dengan satu dan mengimbangi kuadrat dengan 1/2 maka mereka seperti heks dan relatif mudah untuk melakukan pengkodean untuk melacak koneksi. Tetapi ketika Anda mendapatkan pole-ward, itu menjadi lebih dan lebih ekstrem.

Memproyeksikan permukaan dunia ke permukaan kubus memang menggoda. Tapi saya pikir pasti ada solusi yang lebih elegan yang sudah digunakan.

Jika saya melakukan hal kubus (tidak membedahnya lebih jauh melalui geodesi) Apakah ada pro dan kontra yang terkait dengan menempatkan kutub di tengah wajah atau di sudut tiga sisi?

clweeks
sumber
1
Bisakah Anda menguraikan apa yang Anda maksud dengan "kotak (ish)"? Bagaimana kuadrat itu "kuadrat"?
Steve H

Jawaban:

9

Saya selalu ingin melihat permainan di mana peta bulat menggunakan polihedron biasa dari beberapa jenis alih-alih bermain dunia dengan torus. Teknik ini disebut peta Dymaxion . (sumber: grunch.net )teks alternatif         

Saya akan merekomendasikan Icosahedron . Celupkan segitiga saat ini sehingga sejajar di satu sisi persegi. Ketika pemain bergerak dari segitiga, tarik ke atas segitiga berikutnya dan petakan kembali secara identik. Koordinat pemain kemudian akan dipetakan kembali ke bagian baru. Jadi setiap bagian dari peta Anda memiliki sistem koordinatnya sendiri. Anda juga harus menggambar latar belakang untuk 3 bagian yang berdekatan dan 9 bagian yang berdekatan. Saya tidak berpikir pengguna akan dapat menentukan bagaimana itu diterapkan jika dilakukan dengan baik.

Ini adalah contoh bagaimana ini bisa bekerja.

Tentu saja setelah membaca ini Anda mungkin akan menggunakan peta torus klasik dan saya akan menunggu untuk melihat alam semesta polyhedral yang sebenarnya.

deft_code
sumber
Saya tidak akan menggunakan torus. Saya bisa menggunakan silinder seperti yang dilakukan permainan Civ. Tapi, mengingat kurangnya solusi yang brilian, saya serius condong ke arah kubus. Kubus adalah polyhedron! :)
clweeks
5

Jika Anda membuat bola menggunakan basis geodesik, area kutub diperlakukan tidak berbeda dari wilayah lain dalam hal spasi verteks yang memfasilitasi pemetaan uv yang seragam.

Sebagian besar aplikasi pemodelan memungkinkan Anda untuk membuat bola primitif menggunakan desain geodesik.

Steve H
sumber
Masalahnya adalah Anda akan mendapatkan berlian daripada kotak dalam kasus ini, dan bukan itu yang diinginkan OP.
Kornel Kisielewicz
Kecuali jika saya melewatkan sesuatu, itu tidak memberi saya daerah yang lebih mudah untuk dikoordinasikan dan memetakan dan menautkan ... bukan?
clweeks
Geodesic sepertinya cara untuk pergi ke saya, tidak bisa memikirkan opsi lain untuk pembagian reguler. Jika Anda benar-benar membutuhkan daerah persegi, tentunya Anda dapat menghasilkan wilayah persegi, berpusat pada pusat segitiga, meskipun tumpang tindih dengan ubin lainnya. Untuk bola cukup besar (dan segitiga cukup kecil), offset antara daerah kuadrat dan wajah segitiga yang berdekatan akan diabaikan. Itu harus mempertahankan keuntungan karena dapat menggambarkan interaksi lokal (yaitu kuadrat yang sama) dalam sistem koordinat yang sama, bukan?
MrCranky
Saya pikir ada beberapa bentuk geodesik yang dapat memberikan kuadrat yang sesuai jika BENAR-BENAR dibutuhkan.
speeder
Anda mendapatkan berlian alih-alih kotak, tetapi itu seharusnya cukup mudah untuk membuat transformasi untuk memperbaikinya. Tidak ada tiang yang dijamin.
ChrisE
5

Tidak ada cara untuk "memetakan" bola dengan kotak (atau persegi panjang) dan membuat mereka semua bergabung di simpul "umum".

Namun, apakah layak untuk menghasilkan "pandangan lokal" pada permintaan? Ruang masalah tidak benar-benar dinyatakan dalam pertanyaan, tetapi jika saya sedang mengerjakan sesuatu di mana saya ingin pemandangan kota tetapi ingin dapat memutar dunia, saya mungkin sementara hanya memetakan kotak ke bagian "cukup datar" dari Dunia. Asal usul grid akan berada di mana pun pusat lokal Anda berada, dan normal pada saat itu cocok dengan normal permukaan planet ini.

Kemudian, ketika seseorang keluar dari grid, yang baru dihasilkan sesuai permintaan.

Ini mungkin atau mungkin tidak bekerja untuk OP, tetapi untuk beberapa itu mungkin berguna.

dash-tom-bang
sumber
4

Ambil kubus, dengan jarak antara simpul dan pusat kubus sama dengan jari-jari yang diinginkan. Anda memiliki bola yang terbuat dari 6 paha depan.

Sekarang di setiap langkah, ambil setiap quad, bagi menjadi 4, dan pindahkan 5 simpul baru (satu di tengah, dan 4 di tepi - peringatan, mereka DIBAGI) jauh dari pusat sehingga mereka suka pada yang diinginkan radius.

Tidak, metode ini tidak sempurna, tetapi setidaknya ini adalah distribusi yang kurang lebih sama di bola.

Kornel Kisielewicz
sumber
3
Distorsi ini sebenarnya cukup parah dengan ini - paha depan di tengah akan dekat kuadrat, dan yang di dekat sudut akan terdistorsi parah.
JasonD
@JasonD: Masih akan lebih baik dari semua berlian. Sarankan solusi yang kurang terdistorsi jika Anda ingin downvote.
Kornel Kisielewicz
Nah, Anda dapat memperkirakan bola dengan cukup baik dengan divisi geodesik, tapi saya tidak yakin saya melihat bagaimana itu membantu saya.
clweeks
1

Dengan max dymaxion Anda punya segi enam diletakkan dalam segitiga di permukaan datar tetapi karena peta tidak benar-benar datar mereka adalah segilima. Jika Anda ingin memungkinkan pemain untuk menjaga orientasi mereka ketika mereka berjalan di bagian-bagian tertentu Anda harus memisahkan peta lokasi dari bagaimana mereka sebenarnya disimpan. Untuk hal-hal seperti bangunan, Anda dapat menyimpan sedikit peta vektor persegi panjang dan kemudian hanya melakukan pekerjaan kasar menggambar mereka pada orientasi apa pun yang Anda butuhkan.

Anda tidak perlu selalu membuat interior terlihat seperti telah terjadi Gempa Bumi baru-baru ini karena saya pikir pemain rata-rata bahkan tidak boleh menatap mata mereka tentang memasuki pintu ke timur laut tetapi masuk ke layar dengan pintu depan berorientasi karena selatan dan seluruh bangunan di grid biasa.

Meskipun jika Anda hanya akan menyimpan bangunan dan situs-situs penting seperti itu maka Anda sudah melakukan semua pekerjaan untuk pola soccerball. Hasil akhirnya adalah bahwa Anda menyimpan dunia sebagai beberapa pola non-kuadrat dan kemudian memaksanya ke dalam kotak seperti itu di mana pun pemain berada.

Ada alternatif lain - jika Anda tidak memberi mereka indikasi bola dengan tepat, seperti jika Anda hanya memberi mereka kompas presisi rendah untuk memberi tahu mereka mana dari empat arah ortogonal yang paling dekat dengan Utara, maka Anda bisa pergi dengan hanya melakukan rotasi 90 derajat untuk lokasi apa pun pemain pergi ke. Mengingat tingkat grafis yang diasumsikan itu bukan seolah-olah Anda harus khawatir tentang gedung tinggi yang menutupi pintu. Selama mereka tahu jika mereka berada di dekat kutub atau tidak, mereka tidak boleh terlalu marah tentang kompas yang berubah pada mereka, kecuali jika NPC di sekitar sana menyuruh mereka pergi ke Timur Laut atau mereka mencoba untuk benar-benar pergi ke koordinat lintang dan bujur tertentu .


sumber
1

Anda mengajukan pertanyaan bahwa orang yang membuat peta telah meminta untuk lama waktu :)

Paling pasti baca di Proyeksi Peta untuk mendapatkan beberapa wawasan dan ide yang mungkin membantu. Tantangan untuk mewakili permukaan bola pada / dengan bidang 2D datar telah menjadi sesuatu yang telah dipikirkan orang sejak lama.

Jawaban singkatnya adalah, tidak, Anda tidak dapat melakukannya. Itulah sebabnya ketika Anda melihat peta dunia, beberapa bagian terdistorsi dan sebagian tidak. Biasanya itu kutub karena sebagian besar peta adalah tentang daerah non-kutub.

Seperti jawaban lain katakan, jawabannya adalah menggunakan bentuk yang berbeda (misalnya heks atau segitiga), atau secara dinamis membuat peta Anda dengan cepat untuk sudut pandang pengguna saat ini.

Ubin persegi cukup mudah untuk dikelola tanpa pertanyaan, tapi saya tidak berpikir membuat peta hex ubin itu sulit.

Inilah artikel yang lebih lama dari GameDev.net yang mungkin berguna bagi Anda. Ini tentang melakukan ubin isometrik dan heksagonal pada kisi.

http://www.gamedev.net/reference/articles/article747.asp

Googling "tiling hex map" akan memberi Anda banyak hit, beberapa bermanfaat, sebagian tidak.

Tim Holt
sumber
1

Saya mengoperasikan beberapa kamera jaringan PTZ dari Sony, model SNC-RX570N, untuk keperluan pelacakan objek bergerak di langit dan melakukan triangulasi untuk mendapatkan trek 3D yang sebenarnya. Salah satu aspek dari pengaturan awal adalah untuk menentukan "tur" tanpa pengawasan, untuk itu waypoint harus dipilih. Ada sejumlah terbatas titik arah yang dapat diprogram seperti itu, dan saya ingin menutupi seluruh belahan bumi ("bola langit") dari horizon ke zenith, tanpa meninggalkan celah.

Jadi saya bertanya pada diri sendiri pertanyaan "Berapa titik minimum waypoint yang saya butuhkan untuk cakupan penuh (tanpa celah)?". Saya telah menemukan bahwa saya sebenarnya tidak dapat sepenuhnya memahaminya.

Kamera ini memiliki wajan tak berujung (360 deg) dan 0-90 deg miring, jadi secara teoritis dimungkinkan untuk mencapai cakupan penuh. Tampilan kamera, yang dimaksudkan untuk penggunaan komputer, adalah aspek rasio 4: 3 segi empat. FOV horizontal kasar pada zoom 1x adalah 58 deg.

Ada dua cara untuk merepresentasikan masalah, tergantung pada proyeksi mana yang dipilih: - bujursangkar seperti Mercator, di mana cakrawala adalah "ekuator", dan zenit adalah "kutub", melebar di lebih dari 360 derajat panci. - kutub, di mana cakrawala adalah keliling lingkaran dan zenit adalah pusat lingkaran.

Saya menemukan kutub cara termudah untuk mendekati masalah. Saya dapat mengukir lingkaran menjadi irisan pai horizontal ukuran FOV, dan ini memberitahu saya bahwa saya memerlukan 7 titik arah di sekitar lingkaran dengan 58 derajat H-FOV. Sejauh ini baik. Jari-jari bagian dalam hanyalah kemiringan atau V-FOV, yaitu 3/4 dari 58 derajat. Sejauh ini bagus - saya sudah membahas bagian terluar dari lingkaran.

Tapi itu menjadi lebih sulit ketika kita mendekati puncak. Saya akan berasumsi bahwa salah satu titik arah saya persis di puncak. Bagaimana cara memetakan persegi panjang tampilan saya ke wilayah di sekitar pusat lingkaran? Apakah itu bentuk persegi panjang, elips, bantalan, atau apa? Bagaimana cara mengisi bit tengah antara cakupan luar yang rapi dan bentuk aneh di zenith? Cemas.

Saya perhatikan bahwa sudut solid suatu belahan bumi adalah steradian 2 * PI, dan sudut FOV saya pada zoom 1x adalah 0,762 st, artinya saya perlu minimal 9 tessellations. Saya menduga jawabannya lebih tinggi dari 9.

Andrew
sumber
Bagaimana dengan ini .. Lingkaran memiliki PI ^ 2 rad ^ 2 area, dan persegi panjang FOV adalah area 0,75 rad ^ 2. Jadi secara naif kita membutuhkan 13,16 poin yang harus dibulatkan untuk cakupan penuh hingga 14 poin. Pertanyaannya sekarang adalah - bagaimana ini ditempatkan?
Andrew
0

Jika Anda ingin membuat kisi di seluruh dunia, saya sarankan Anda membagi planet ini di negara atau benua, dan membuat kisi persegi yang berpusat di masing-masing. Biarkan laut menutupi lapisannya.

zaratustra
sumber
Sebenarnya, pertanyaan saya adalah "karena saya jelas tidak bisa melakukan apa yang menurut Anda sebenarnya saya tanyakan, apa yang mungkin saya lakukan?"
clweeks
Baiklah, sudah diedit.
zaratustra
Ya, saya kira saya dilacak oleh bagian yang lain. Saya sedang berpikir tentang menerapkan Fuller's Dymaxion Map tetapi bekerja dengan ubin segitiga tampak seperti clusterF * sebanyak masalah kutub-ubin yang saya mulai dengan. Jadi, dengan saran Anda, jika seseorang berlayar dari Amerika Utara ke Asia utara, dan koordinat itu penting (mungkin mereka bisa membangun pangkalan terapung atau apalah) bagaimana cara menjahit jahitannya bersama? Baru saja datang dengan tabel NA: A5 -> A: koneksi tipe Z475?
clweeks
Saya tebak. Meskipun jika mereka berhasil melakukan itu, saya hanya akan memberi mereka hadiah bonus dan menempatkan mereka dari grid sampai mereka pergi ke suatu tempat yang masuk akal.
zaratustra