有沒有真正需要什麼戲劇性超出繪圖直接到笛卡爾座標。簡單的啓發式算法可以用來處理路徑,並且可能在大多數時間內達到最佳的最小角度數,但可能更經常是最短路徑。所有這些都可以根據需要動態地完成,但是在保持圖形精度的同時,不需要更加分散地將屏幕分離出來(像素應該保持最離散的水平),而不需要複雜的算法。
對於疊加層,只需將所有像素設置爲線的顏色,並根據像素是否爲線的一部分將Alpha通道位修改爲透明或不透明。要確定哪些位是該行的一部分需要一些幾何圖形,但是一旦你擁有了一切,這是一塊蛋糕。
要弄清楚如何在Alpha通道上繪製線條,您需要弄清楚線條的樣式。你會做很多事情取決於風格。一種常見的風格是使用水平方向的直線和直角四分之一圓對齊的直線。
對於「避免」算法,當您只想避免代表節點的「盒子」時,這些算法不會太難實現......要將所有線條都消除一點,甚至連Visio都沒有僱傭。爲了避免盒子/節點,使用盒子邊緣之間的中點(例如geo1和geo3之間的垂直邊緣)很適合對稱,然後選擇一個簡單的預定義距離以保持非連接線條(即線條沒有連接到特定的盒子)遠離箱子也運作良好。對此的一種通用算法很簡單,但在這裏描述有點過於冗長,但本質上是一組廣義檢查和開關,用於水平和垂直對齊線和四分之一圈。如果您最終希望得到關於如何做到這一點的更多細節,只需發表評論就可以了。
如果你正在尋找一些已經爲你做的事情,你想要的連接類型和重新安排取決於應用程序,而不是很多人制作低需求或特定需求的工具。顯然這種類型的軟件已經存在,因爲Visio和其他人使用它,但是不管它是否可以作爲開放源代碼或其他免費庫的一部分提供,我不確定。
爲1一個完整的網格可能是沒有必要的,一個漢南網格的點連接和位,以避免應該足夠我認爲 – 2010-03-17 09:43:22
謝謝,我不想重新發明輪子,雖然我相信我們可以都提出了精細調整算法的近似值。我想知道有沒有什麼能夠在一定程度上爲你做到這一點? – ApplePieIsGood 2010-03-17 11:17:26
答案本身引入了一些不平凡的問題來處理(它解釋了一個過程,但缺乏「如何」部分)。是否有「經典」算法來覆蓋它? – gpilotino 2011-04-26 14:11:07