三村合建水厂问题研究
A村、B村和C村都在河流(Y軸)的東面,A村在y=3.5 km的路旁,B村在y=2.5 km的路旁,C村在y=0.5 km的路旁,他們要在河邊合建一間水廠。請設計使水管總長最短的方案。
設計要求:
(1)使用matlab-GUI軟件編程實現;
(2)只在第一象限[0,4]×[0,4]范圍研究該問題;
(3)界面要有問題描述;
(4)輸入給定點A, B, C的坐標;
(5)輸出水廠和費爾馬點的坐標,水管總長和水管的布局圖。
參考界面:
Matlab程序下載:點擊打開鏈接
http://download.csdn.net/detail/softimite_zifeng/9679181
子豐的一些思路:
1. 本題的背景知識:費爾馬(Fermat)問題,斯坦納(Steiner)最短樹問題。你需要知道什么是三角形的Fermat點,如何求Fermat點,以及如果是哪個村莊如何建水廠(這就是個拓展了的Fermat問題)。你還需要知道什么是Steiner點,如何求Steiner點,以及一個Steiner最短樹問題需要添加幾個Steiner點。
注:如果需要相關的內容,可以和博主聯系。
2. Matlab-GUI設計:如何在圖中用鼠標拖動村莊(黑點)。其實拖動黑點可以簡單的理解為你在不停地擦去原來的點并在新的地方畫出新的點,這樣就能很容易設計出程序。需要使用WindowButtonDownFcn,WindowButttonMotionFcn和WindowButtonUpFcn這三個函數。其中WindowButtonDownFcn用于選中村莊,WindowButtonMotionFcn用于鼠標移動時擦除點和重新畫點,WindowButtonUpFcn用于停止鼠標移動時還繼續擦除點畫點。
3. 這個程序最難的部分還是設計求水廠和Steiner點的算法。由于本題的特殊性,Steiner點出現的情況其實只有幾種(共3大種類型),只需要根據這幾種情況設計出相應的算法,然后根據每種情況求出的總長,取出最短總長的那種情況即可。
Matlab程序下載:點擊打開鏈接
http://download.csdn.net/detail/softimite_zifeng/9679181
總結
以上是生活随笔為你收集整理的三村合建水厂问题研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 arm 官网上找到合适的手册
- 下一篇: Spring中的Environment