问题描述:
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程序:包括了程序的运行界面、程序界面和代码。
Matlab程序下载:点击打开链接
http://download.csdn.net/detail/softimite_zifeng/9679181
运行界面:
程序界面:
Matlab程序下载:点击打开链接
http://download.csdn.net/detail/softimite_zifeng/9679181
代码:
%三村合建水厂问题
function varargout = Water(varargin)
% WATER MATLAB code for Water.fig
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Water_OpeningFcn, ...
'gui_OutputFcn', @Water_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function Water_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%初始化坐标轴
line([0,4],[0.5,0.5],'linewidth',2,'color','b');
line([0,4],[2.5,2.5],'linewidth',2,'color','b');
line([0,4],[3.5,3.5],'linewidth',2,'color','b');
line([0,4],[1,1],'color','k');
line([0,4],[2,2],'color','k');
line([0,4],[3,3],'color','k');
line([0,4],[4,4],'color','k');
hold on;
plot(5.7,3.4,'k.','markersize',20);
plot(5.7,3.1,'r.','markersize',20);
plot(5.7,2.8,'o','markersize',5,'linewidth',2);
global xA; %村庄A的横坐标
xA=0;
global xB; %村庄B的横坐标
xB=0;
global xC; %村庄C的横坐标
xC=0;
global start; %坐标轴中是否有村庄
start=0;
global bd; %鼠标是否选中村庄
global bu; %鼠标是否释放
global bx; %选中的村庄号
bd=0;bu=0;bx=1;
function varargout = Water_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%随机三个点
function pushbutton2_Callback(hObject, eventdata, handles)
global start; %坐标轴中是否有村庄
start=1;
global xA; %村庄A的横坐标
global xB; %村庄B的横坐标
global xC; %村庄C的横坐标
cla;
%初始化坐标轴
line([0,4],[0.5,0.5],'linewidth',2,'color','b');
line([0,4],[2.5,2.5],'linewidth',2,'color','b');
line([0,4],[3.5,3.5],'linewidth',2,'color','b');
line([0,4],[1,1],'color','k');
line([0,4],[2,2],'color','k');
line([0,4],[3,3],'color','k');
line([0,4],[4,4],'color','k');
hold on;
plot(5.7,3.4,'k.','markersize',20);
plot(5.7,3.1,'r.','markersize',20);
plot(5.7,2.8,'o','markersize',5,'linewidth',2);
%初始化数据
set(handles.xA,'String',0);
set(handles.xB,'String',0);
set(handles.xC,'String',0);
set(handles.yM,'String',0);
set(handles.ts,'String',0);
set(handles.xF1,'Visible','off');
set(handles.yF1,'Visible','off');
set(handles.xF2,'Visible','off');
set(handles.yF2,'Visible','off');
set(handles.xF1,'Str