簡體   English   中英

有沒有辦法將無向圖轉換為 (x,y) 坐標系?

[英]Is there a way to convert an undirect graph to an (x,y) coordinate system?

對於我正在處理的一個項目,我有一些 txt 文件,這些文件具有從 id 到 id 和重量。 id 用於標識每個頂點,權重表示頂點之間的距離。 該圖是無向且完全連接的,我使用的是 c++ 和 openFrameworks。 如何將此數據轉換為 1920x1080 圖形的 (x,y) 坐標點,同時保持文本文件中指定的權重?

僅當圖形的維度為 2 或更少時,您才能執行此操作。 因此,您需要確定圖形的維度——這是衡量其連通性的指標。 如果維度為 2 或更小,那么只要允許邊相交,您就始終能夠在歐幾里得平面上對圖形進行 plot,同時保留相對邊長。 如果您禁止相交的邊,那么您只能 plot 圖形在歐幾里得平面上,如果圖形中循環大小與循環密度的比率在整個圖形中足夠低(很難計算)。 我可以告訴你如何 plot 最棘手的位 - 周期 - 並給你一個通用的方法,但你實際上在如何 plot 這方面有一些自由,所以如果你有更具體的問題,請發表評論或編輯問題要求。

如果你不知道你是否有周期,那就找出來吧! 這里有一些有效的算法

繪制循環。 給循環中的第一個節點任意坐標。 給出以與第一個節點的距離為界的循環坐標中的第二個節點。 例如,如果您 plot 第一個節點位於(0,0)並且第一個和第二個節點之間的邊的長度為1 ,那么 plot 位於(1, 0)的第二個節點。 現在它變得很棘手,因為您需要計算角度。

計數循環中的節點數n 為了使循環形成多邊形,循環形成的角度之和必須為(n - 2) * 180 degrees ,其中n是邊數(即節點數)。 現在你不會有一個正多邊形,除非所有的邊長度都相同,所以你不能只使用(n - 2) / n * 180 degrees作為你的角度。 如果你使角度太尖銳,那么邊緣將被迫相交; 如果你讓它們太大,那么你將無法關閉多邊形。 按照StackExchange Math 中的說明計算內角。

重復這個過程到 plot 圖中的每個周期,如果需要,在任意位置。 如果需要,您可以隨時翻譯這些周期。

策划其他一切。 我的天真,無疑是低效的方法是逐層遍歷每個循環中的每個節點和 plot 相鄰節點(“分支”)。 然后旋轉和平移整個循環(包括連接的分支)以確保每條邊都可以到達它的兩個節點。 最后,如果可能,根據需要旋轉分支(相對於它們連接的循環)以解決相交的邊緣。

同樣,如果您正在尋找更具體的內容,請修改問題或發表評論。 一個完整的算法(或任何通用語言的完整代碼)會給出一個很長的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM