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