Cách tạo bản đồ từ biểu đồ


7

Tôi muốn vẽ bản đồ đa giác 2d dựa trên dữ liệu được cung cấp bởi một nguồn khác để dễ dàng phân tích các hành động trên bản đồ. Dữ liệu có định dạng sau:

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']
...

Số đầu tiên là ID của một nút, danh sách sau đây chứa ID của các nút lân cận. Vì số lượng hàng xóm của một nút khác nhau, tôi cần vẽ bản đồ đa giác.

Vì vậy, tôi đã cố gắng sử dụng đa giác Voronoi cho đại diện bản đồ. Vấn đề là: Làm thế nào tôi có thể xác định các điểm để đáp ứng tất cả các mối quan hệ khu phố? Tôi đoán lần thử đầu tiên của tôi ít nhiều là một lỗi trong chu kỳ thử và lỗi của tôi. Tôi đã sử dụng công cụ sfdp của graphviz để lấy các vị trí điểm của biểu đồ:

biểu diễn đồ thị mẫu bằng sfdp

Sử dụng vị trí của các điểm dẫn đến biểu diễn bản đồ sau:

bản đồ mẫu sử dụng sơ đồ voronoi

Vấn đề của phương pháp này là ví dụ các nút 4 và 1 là hàng xóm nhưng trong sơ đồ Voronoi, chúng không phải do vị trí của các nút. Vì vậy, đối với tôi phương pháp này thất bại.

Googling, tôi đã tìm thấy rất nhiều hướng dẫn tạo bản đồ bằng đa giác hoặc gạch nhưng tôi chưa tìm ra cách tôi có thể tạo bản đồ cho dữ liệu đã cho của mình. Tôi đoán có một cách tiếp cận bằng cách sử dụng (nhiều) hình lục giác / hình tam giác / hình vuông hoặc hỗn hợp để đạt được những gì tôi cần nhưng tôi không biết tôi sẽ tìm kiếm cái gì.

Có một từ khóa hoặc một thuật toán có thể giúp tôi ở đây?

Cập nhật / Kết quả : Để hoàn thiện: Đây là kết quả của tôi sau khi sử dụng các đề xuất của câu trả lời được chấp nhận: kết quả


Từ dữ liệu đã cho, nhiều bản đồ có thể được tạo, đặc biệt là với các điểm 12 và 9 chỉ có 1 mối quan hệ. Đây có phải là một vấn đề đặc biệt?
lewisjb

@Pyro: không, đây không phải là vấn đề. Nó chỉ được sử dụng để phân tích.
maggie

bạn sẽ tìm thấy thuật toán cho vấn đề kép này được liệt kê dưới dạng sơ đồ tam giác Delaunay và biểu đồ Voronoi.
tinyfiledialogs

Câu trả lời:


12

Những gì bạn muốn là tạo ra một biểu đồ kép ; nghĩa là, một biểu đồ được tạo ra bằng cách chuyển đổi các mặt thành các đỉnh và kết nối chúng dựa trên các mặt liền kề trong biểu đồ gốc. Thí dụ:

đồ thị kép

Vấn đề, như bạn có thể thấy, là nếu bạn muốn giữ cùng bố cục của biểu đồ, bạn sẽ nhận được một số cạnh thực sự cong trong biểu đồ kép. Ngoài ra, bạn sẽ thường kết thúc với một hình đa giác - một biểu đồ trong đó một số đỉnh có nhiều cạnh giữa chúng. Nó được đảm bảo là phẳng, vì vậy đó là một cái gì đó.

Để sử dụng ví dụ của bạn, chúng tôi có thể tạo biểu đồ kép theo các bước sau:

Bước 1: Đối với mỗi mặt trong biểu đồ gốc, tạo một đỉnh

trung tâm và vòng ngoài

Lưu ý rằng chúng ta tạo một "vòng" bên ngoài để biểu thị "đỉnh" ngoài cùng - điều này là để chúng ta có thể có một biểu đồ trông đẹp hơn ở cuối, mà không có các cạnh cong điên rồ.

Bước 2: Đối với mỗi cạnh trong biểu đồ ban đầu, hãy kết nối hai đỉnh mặt với một cạnh

Ngoài ra, bạn sẽ phải làm gì đó để các cạnh này không chồng chéo lẫn nhau. Khoảng cách giữa 3 và 12 đặc biệt có vấn đề. Những cạnh mới này có thể cần phải được uốn cong để thực hiện điều này. Đó là những gì bạn nhận được khi có một biểu đồ lõm.

các cạnh

Bước 3: Chơi rủi ro

đồ thị màu


Cảm ơn đã gợi ý. Tôi đã bắt đầu một cách tiếp cận tương tự trước khi điều voronoi của tôi nhưng tôi đã không đưa nó đến cùng. Tôi sẽ làm điều này và gửi kết quả của tôi sau đó.
maggie

Điều này cũng thú vị, nếu nó giúp bạn ra ngoài, hãy cố gắng tìm kiếm một số thông tin về tính đối ngẫu của voronoi-delaunay. Đây là một khởi đầu tốt để ít nhất hiểu được nó: scicomp.stackexchange.com/questions/771/ mẹo
Gustavo Maciel

1
Thêm một câu hỏi: Cách tiếp cận nào bạn sẽ sử dụng nếu bạn không có sự trợ giúp của sfdp? Có một cách tiếp cận chung để tạo ra một biểu diễn đồ thị phù hợp để có được các vị trí nút cần thiết?
maggie

@maggie bạn sẽ muốn một cái gì đó thực hiện bố trí đồ thị phẳng . Đó không phải là một vấn đề nhỏ và tôi không thể đề xuất một gói cụ thể, nhưng có các tùy chọn ở đâyđây .
congusbongus

1

Nếu hình ảnh đầu tiên, trong đó mỗi điểm là một hình vuông nhỏ với màu sắc nhất định, là những gì bạn đang tìm kiếm, bạn cần xây dựng hình tam giác của Delaunay.


1
Điều này có thể sử dụng thêm một chút nội dung để làm cho câu trả lời ngắn gọn hơn một chút.
Piddock Tom 'Blue'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.