最美樹算法


      前一段時間,自己想做一個行為樹編輯器,給策划用來編輯ai 和 事件。由於本人是做linux C++的,很久沒碰過圖形界面編程了,實在是為難了一陣子,最后一狠心,重新用起大學學的那一些C#知識,自己一點點摸索,做了一個初級的東西出來,自我感覺良好,奉獻出源代碼

     所用的技術是C# + WPF + PRISM 采用MVVM開發,其中的難點可能就是增刪節點,自動生成一棵最美的樹了。什么是最美樹呢?它有個學術上的名字叫reingold-tilford,具體我也說不上來,看下圖:

image_20120328163815

圖一

 

image_20120328163909

圖二

 

圖二第4行比圖一增加了一個節點,整棵樹會自動調整布局,節點與節點之間間隙均勻,我認為這是一棵最美樹。

整個算法實現代碼不多,100多行。大家可以google一下reingold-tiford,可以找到很多相關算法的論文,可惜沒有找到一個具體實現,所以我在此共享一下這份代碼

算法大致描述如下:

1.前序遍歷所有節點計算每個節點初始值Prelim和修正值Modify

  a.如果是葉子節點直接計算出來即可

  b.如果是非葉子節點需要調整已該節點為根節點的子樹的間隙,防止重疊

2.再次遍歷所有節點根據Prelim和Modify值計算的最終位置

代碼:

https://github.com/egametang/Egametang/blob/master/CSharp/

 需要裝nuget,再裝好依賴的庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM