Cara membuat peta dari grafik

7

Saya ingin menggambar peta poligon 2d berdasarkan data yang disediakan oleh sumber lain untuk memudahkan menganalisis tindakan pada peta. Data memiliki format berikut:

1 ['2', '4', '5', '7', '17', '10']
2 ['1', '3', '4']
3 ['2', '11', '4']
4 ['1', '2', '3', '11', '13', '18', '5']
5 ['1', '4', '18', '17']
6 ['7', '8']
...

Nomor pertama adalah ID dari sebuah node, daftar berikut berisi ID dari tetangganya. Karena jumlah node tetangga berbeda, saya perlu menggambar peta poligon.

Jadi saya mencoba menggunakan poligon Voronoi untuk representasi peta. Masalahnya adalah: Bagaimana saya bisa menentukan poin untuk memuaskan semua hubungan lingkungan? Saya kira percobaan pertama saya kurang lebih merupakan kesalahan dalam siklus coba-coba saya. Saya menggunakan alat sfdp dari graphviz untuk mendapatkan posisi titik dari grafik:

representasi grafik sampel menggunakan sfdp

Menggunakan posisi titik menghasilkan representasi peta berikut:

peta sampel menggunakan diagram voronoi

Masalah dari pendekatan ini adalah bahwa misalnya node 4 dan 1 adalah tetangga tetapi dalam diagram Voronoi mereka bukan karena posisi node. Jadi bagi saya pendekatan ini gagal.

Googling, saya menemukan banyak tutorial membuat peta dengan poligon atau ubin, tetapi saya belum tahu bagaimana saya bisa membuat peta untuk data yang diberikan. Saya kira ada pendekatan menggunakan (beberapa) segi enam / segitiga / kotak atau campuran untuk mencapai apa yang saya butuhkan tetapi saya tidak tahu apa yang akan saya cari.

Apakah ada kata kunci atau algoritma yang dapat membantu saya di sini?

Pembaruan / Hasil : Untuk kelengkapan: Ini adalah hasil saya setelah menggunakan saran dari jawaban yang diterima: hasil

maggie
sumber
Dari data yang diberikan, beberapa peta bisa dibuat, terutama dengan poin 12 dan 9 yang hanya memiliki 1 hubungan. Apakah ini masalah khusus?
lewisjb
@ Pyro: tidak, ini bukan masalah. Ini hanya digunakan untuk analisis.
maggie
Anda akan menemukan algoritme untuk masalah ganda ini yang tercantum sebagai triangulasi Delaunay dan diagram Voronoi.
tinyfiledialogs

Jawaban:

12

Yang Anda inginkan adalah menghasilkan grafik ganda ; yaitu, grafik yang dihasilkan dengan mengubah wajah menjadi simpul , dan menghubungkannya berdasarkan wajah yang berdekatan di grafik asli. Contoh:

grafik ganda

Masalahnya, seperti yang Anda lihat, adalah bahwa jika Anda ingin mempertahankan tata letak grafik yang sama, Anda akan mendapatkan beberapa tepi yang benar-benar melengkung di grafik ganda. Selain itu, Anda akan sering berakhir dengan multigraf - grafik di mana beberapa simpul memiliki beberapa tepi di antaranya. Ini dijamin planar, jadi itu sesuatu.

Untuk menggunakan contoh Anda, kami dapat menghasilkan grafik ganda dalam langkah-langkah berikut:

Langkah 1: Untuk setiap wajah dalam grafik asli, buat simpul

centroid dan cincin luar

Perhatikan bahwa kita membuat "cincin" luar untuk mewakili "titik" terluar - ini adalah agar kita dapat memiliki grafik yang tampak lebih bagus di bagian akhir, tanpa tepi lengkung gila.

Langkah 2: Untuk setiap tepi dalam grafik asli, hubungkan kedua simpul wajah dengan tepi

Juga, Anda harus melakukan sesuatu agar tepinya tidak saling tumpang tindih. Kesenjangan antara 3 dan 12 sangat bermasalah. Tepi baru ini mungkin harus lentur untuk memungkinkan ini. Itu yang Anda dapatkan karena memiliki grafik cekung.

ujung-ujungnya

Langkah 3: Mainkan Risiko

grafik berwarna

congusbongus
sumber
Terima kasih atas petunjuknya. Saya memulai pendekatan yang sama sebelum hal voronoi saya tetapi saya tidak membawanya sampai akhir. Saya akan melakukan ini dan memposting hasil saya.
maggie
Ini menarik, juga, jika itu membantu Anda, cobalah mencari beberapa informasi tentang dualitas voronoi-delaunay. Ini adalah awal yang baik untuk setidaknya memahaminya: scicomp.stackexchange.com/questions/771/…
Gustavo Maciel
1
Satu pertanyaan tambahan: Pendekatan mana yang akan Anda gunakan jika Anda tidak memiliki bantuan sfdp? Apakah ada pendekatan umum untuk membuat representasi grafik yang sesuai untuk mendapatkan posisi simpul yang dibutuhkan?
maggie
@ Maggie Anda akan menginginkan sesuatu yang melakukan tata letak grafik planar . Ini bukan masalah sepele, dan saya tidak bisa merekomendasikan paket tertentu, tetapi ada opsi di sini dan di sini .
congusbongus
1

Jika gambar pertama, di mana setiap titik adalah kotak kecil dengan warna tertentu, adalah apa yang Anda cari, Anda perlu membangun triangulasi Delaunay.

Blas Soriano
sumber
1
Ini bisa menggunakan sedikit lebih banyak konten untuk membuat jawabannya menjadi lebih ringkas.
Tom 'Blue' Piddock