问题描述:

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.figgui_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});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
endfunction 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,'String',0);
set(handles.yF1,'String',0);
set(handles.xF2,'String',0);
set(handles.yF2,'String',0);%随机生成三个点
xA=round((4*rand)*1000)/1000;
xB=round((4*rand)*1000)/1000;
xC=round((4*rand)*1000)/1000;
plot(xA,3.5,'k.','markersize',25);
plot(xB,2.5,'k.','markersize',25);
plot(xC,0.5,'k.','markersize',25);%计算水厂位置,S点坐标等
[ts,yM,F,t,s]=Short(xA,3.5,xB,2.5,xC,0.5);%在坐标轴中绘图
plottu(ts,yM,F,t,s,handles,xA,3.5,xB,2.5,xC,0.5);%清空坐标轴
function pushbutton3_Callback(hObject, eventdata, handles)global start;   %坐标轴中是否有村庄
start=0;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,'String',0);
set(handles.yF1,'String',0);
set(handles.xF2,'String',0);
set(handles.yF2,'String',0);%退出程序
function pushbutton4_Callback(hObject, eventdata, handles)close;%打开问题描述
function togglebutton1_Callback(hObject, eventdata, handles)val=get(handles.togglebutton1,'Value');switch valcase 1set(handles.togglebutton1,'String','问题描述关');set(handles.text10,'Visible','on');case 0set(handles.togglebutton1,'String','问题描述开')set(handles.text10,'Visible','off');
end%村庄A横坐标编辑框
function xA_Callback(hObject, eventdata, handles)function xA_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%村庄A纵坐标编辑框
function edit2_Callback(hObject, eventdata, handles)function edit2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%村庄B横坐标编辑框
function xB_Callback(hObject, eventdata, handles)function xB_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%村庄B纵坐标编辑框
function edit4_Callback(hObject, eventdata, handles)function edit4_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%村庄C横坐标编辑框
function xC_Callback(hObject, eventdata, handles)function xC_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%村庄C纵坐标编辑框
function edit6_Callback(hObject, eventdata, handles)function edit6_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%S点横坐标编辑框
function xF1_Callback(hObject, eventdata, handles)function xF1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%S点纵坐标编辑框
function yF1_Callback(hObject, eventdata, handles)function yF1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%S点横坐标编辑框
function xF2_Callback(hObject, eventdata, handles)function xF2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%S点纵坐标编辑框
function yF2_Callback(hObject, eventdata, handles)function yF2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%水厂纵坐标编辑框
function yM_Callback(hObject, eventdata, handles)function yM_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%总长编辑框
function ts_Callback(hObject, eventdata, handles)function ts_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end%计算水厂位置,S点坐标等
function [ts,yM,F,t,s] = Short( xA,yA,xB,yB,xC,yC )
%ts最短长度,yM水厂位置,F为S点矩阵,t为S点个数,s表示属于哪种情形ts=0;yM=0;t=0;s=11;
F=[0,0;0,0];%情形1
[xF1,yF1,s1]=qiuF(xA,yA,xB,yB,xC,yC);   %求三角形ABC的F点ts1=abs(xA)+sqrt((yF1-yC)^2+(xF1-xC)^2)+sqrt((yF1-yA)^2+(xF1-xA)^2)+sqrt((yF1-yB)^2+(xF1-xB)^2);
ts2=abs(xB)+sqrt((yF1-yC)^2+(xF1-xC)^2)+sqrt((yF1-yA)^2+(xF1-xA)^2)+sqrt((yF1-yB)^2+(xF1-xB)^2);
ts3=abs(xC)+sqrt((yF1-yC)^2+(xF1-xC)^2)+sqrt((yF1-yA)^2+(xF1-xA)^2)+sqrt((yF1-yB)^2+(xF1-xB)^2);
if ts1<=ts2&&ts1<=ts3ts=ts1;yM=yA;s=11;
elseif ts2<=ts1&&ts2<=ts3ts=ts2;yM=yB;s=12;
elsets=ts3;yM=yC;s=13;
end
F(1,1)=xF1;F(1,2)=yF1;
if s1==1   %是否需要添加S点t=1;
end%情形2
[xD,yD]=tria(xB,yB,xC,yC,xA,yA);   %求等边三角BCD的D点坐标
xF1=((yD+xD*sqrt(3))-(yA-xA*sqrt(3)))/(2*sqrt(3));   %S点坐标
yF1=xF1*sqrt(3)+(yA-xA*sqrt(3));
xM1=0;yM1=yF1;
y0=yA-xA*sqrt(3);
if y0<0y0=0;
end
if yM1>=y0&&yM1<3.5   %水厂位置是否为有效位置[xF2,yF2,s1]=qiuF(xF1,yF1,xB,yB,xC,yC);   %求三角形F1BC的F点ts1=sqrt((yF1-yM1)^2+(xF1-xM1)^2)+sqrt((yF1-yA)^2+(xF1-xA)^2)+sqrt((yF2-yF1)^2+(xF2-xF1)^2)+sqrt((yF2-yC)^2+(xF2-xC)^2)+sqrt((yF2-yB)^2+(xF2-xB)^2);if ts1<ts   %此情形的总长是否比之前的短yM=yM1;ts=ts1;s=2;F=[0,0;0,0];F(1,1)=xF1;F(1,2)=yF1;t=1;F(2,1)=xF2;F(2,2)=yF2;if s1==1t=2;endend
end%情形3
[xD,yD]=tria(xB,yB,xA,yA,xC,yC);   %求等边三角形ABD的D点坐标
xF1=((yC+xC*sqrt(3))-(yD-xD*sqrt(3)))/(2*sqrt(3));
yF1=xF1*sqrt(3)+(yD-xD*sqrt(3));
xM1=0;yM1=yF1;
y0=yC+xC*sqrt(3);
if y0>3.5y0=3.5;
end
if yM1>0&&yM1<=y0[xF2,yF2,s1]=qiuF(xF1,yF1,xB,yB,xA,yA);   %求三角形F1AB的F点ts1=sqrt((yF1-yM1)^2+(xF1-xM1)^2)+sqrt((yF1-yC)^2+(xF1-xC)^2)+sqrt((yF2-yF1)^2+(xF2-xF1)^2)+sqrt((yF2-yA)^2+(xF2-xA)^2)+sqrt((yF2-yB)^2+(xF2-xB)^2);if ts1<ts   %此情形的总长是否比之前的短yM=yM1;ts=ts1;s=3;F=[0,0;0,0];F(1,1)=xF1;F(1,2)=yF1;t=1;F(2,1)=xF2;F(2,2)=yF2;if s1==1t=2;endend
end%情形4
[xD,yD]=tria(xC,yC,xA,yA,xB,yB);   %求等边三角形ACD的D点坐标
xF1=((yD+xD*sqrt(3))-(yB-xB*sqrt(3)))/(2*sqrt(3));
yF1=xF1*sqrt(3)+(yB-xB*sqrt(3));
xM1=0;yM1=yF1;
y0=yB-xB*sqrt(3);
if y0<0y0=0;
end
if yM1>=y0&&yM1<2.5[xF2,yF2,s1]=qiuF(xF1,yF1,xC,yC,xA,yA);   %求三角形F1AC的F点ts1=sqrt((yF1-yM1)^2+(xF1-xM1)^2)+sqrt((yF1-yB)^2+(xF1-xB)^2)+sqrt((yF2-yF1)^2+(xF2-xF1)^2)+sqrt((yF2-yA)^2+(xF2-xA)^2)+sqrt((yF2-yC)^2+(xF2-xC)^2);if ts1<ts   %此情形的总长是否比之前的短yM=yM1;ts=ts1;s=4;F=[0,0;0,0];F(1,1)=xF1;F(1,2)=yF1;t=1;F(2,1)=xF2;F(2,2)=yF2;if s1==1t=2;endend
end%情形5
[xD,yD]=tria(xC,yC,xA,yA,xB,yB);   %求等边三角形ACD的D点坐标
xF1=((yB+xB*sqrt(3))-(yD-xD*sqrt(3)))/(2*sqrt(3));
yF1=xF1*sqrt(3)+(yD-xD*sqrt(3));
xM1=0;yM1=yF1;
y0=yB+xB*sqrt(3);
if y0>3.5y0=3.5;
end
if yM1>2.5&&yM1<=y0[xF2,yF2,s1]=qiuF(xF1,yF1,xC,yC,xA,yA);   %求三角形F1AC的F点ts1=sqrt((yF1-yM1)^2+(xF1-xM1)^2)+sqrt((yF1-yB)^2+(xF1-xB)^2)+sqrt((yF2-yF1)^2+(xF2-xF1)^2)+sqrt((yF2-yA)^2+(xF2-xA)^2)+sqrt((yF2-yC)^2+(xF2-xC)^2);if ts1<ts   %此情形的总长是否比之前的短yM=yM1;ts=ts1;s=5;F=[0,0;0,0];F(1,1)=xF1;F(1,2)=yF1;t=1;F(2,1)=xF2;F(2,2)=yF2;if s1==1t=2;endend
end%情形6
[xD,yD]=tria(xB,yB,xA,yA,0,0);   %求等边三角形ABD的D点坐标
xM1=0;yM1=yD;
if yM1>=2.5&&yM1<=3.5[xF1,yF1,s1]=qiuF(xM1,yM1,xB,yB,xA,yA);   %求三角形M1AB的F点ts1=sqrt((yF1-yM1)^2+(xF1-xM1)^2)+sqrt((yF1-yB)^2+(xF1-xB)^2)+sqrt((yA-yF1)^2+(xA-xF1)^2)+sqrt((yB-yC)^2+(xB-xC)^2);if ts1<ts   %此情形的总长是否比之前的短yM=yM1;ts=ts1;s=6;F=[0,0;0,0];t=0;F(1,1)=xF1;F(1,2)=yF1;if s1==1t=1;endend
end%情形7
[xD,yD]=tria(xB,yB,xC,yC,0,0);   %求等边三角形BCD的D点坐标
xM1=0;yM1=yD;
if yM1>=0.5&&yM1<=2.5[xF1,yF1,s1]=qiuF(xM1,yM1,xB,yB,xC,yC);   %求三角形M1BC的F点ts1=sqrt((yF1-yM1)^2+(xF1-xM1)^2)+sqrt((yF1-yB)^2+(xF1-xB)^2)+sqrt((yC-yF1)^2+(xC-xF1)^2)+sqrt((yB-yA)^2+(xB-xA)^2);if ts1<ts   %此情形的总长是否比之前的短yM=yM1;ts=ts1;s=7;F=[0,0;0,0];t=0;F(1,1)=xF1;F(1,2)=yF1;if s1==1t=1;endend
end%求三角形的F点
function [xF,yF,s1] = qiuF(x1,y1,x2,y2,x3,y3)
%s1表示F点是否在三角形内部s1=0;
%三角形两边的夹角大于等于120
if ((x2-x1)*(x3-x1)+(y2-y1)*(y3-y1))/(sqrt((x2-x1)^2+(y2-y1)^2)*sqrt((x3-x1)^2+(y3-y1)^2))<=-1/2xF=x1;yF=y1;
elseif ((x1-x2)*(x3-x2)+(y1-y2)*(y3-y2))/(sqrt((x1-x2)^2+(y1-y2)^2)*sqrt((x3-x2)^2+(y3-y2)^2))<=-1/2xF=x2;yF=y2;
elseif ((x1-x3)*(x2-x3)+(y1-y3)*(y2-y3))/(sqrt((x1-x3)^2+(y1-y3)^2)*sqrt((x2-x3)^2+(y2-y3)^2))<=-1/2xF=x3;yF=y3;
elses1=1;[x4,y4]=tria(x1,y1,x2,y2,x3,y3);[x5,y5]=tria(x1,y1,x3,y3,x2,y2);k34=(y3-y4)/(x3-x4);k25=(y2-y5)/(x2-x5);xF=((k25*x2-y2)-(k34*x3-y3))/(k25-k34);yF=y2+k25*(xF-x2);
end%求等边三角形ABD的D点坐标
function [xD,yD] = tria(xA,yA,xB,yB,xC,yC)
%点D和点C分别在直线AB的两侧xD=(xA+xB)/2-(yA-yB)*sqrt(3)/2;
yD=(yA+yB)/2+(xA-xB)*sqrt(3)/2;
%判断点D和点C是否在直线AB的两侧
if xA~=xBk=(yB-yA)/(xB-xA);b=yA-k*xA;if (k*xD-yD+b)*(k*xC-yC+b)>0xD=(xA+xB)/2+(yA-yB)*sqrt(3)/2;yD=(yA+yB)/2-(xA-xB)*sqrt(3)/2;end
elseif (xD-xA)*(xC-xA)>0xD=(xA+xB)/2+(yA-yB)*sqrt(3)/2;yD=(yA+yB)/2-(xA-xB)*sqrt(3)/2;end
end%在坐标轴中绘图
function f = plottu(ts,yM,F,t,s,handles,xA,yA,xB,yB,xC,yC)%显示村庄A,B,C的横坐标
set(handles.xA,'String',round(xA*1000)/1000);   %取小数点后三位
set(handles.xB,'String',round(xB*1000)/1000);
set(handles.xC,'String',round(xC*1000)/1000);%显示水厂的纵坐标以及总长
set(handles.yM,'String',round(yM*1000)/1000);
set(handles.ts,'String',round(ts*1000)/1000);%显示S点的横坐标和纵坐标
if t==1   %S点个数set(handles.xF1,'Visible','on');set(handles.yF1,'Visible','on');set(handles.xF1,'String',round(F(1,1)*1000)/1000);set(handles.yF1,'String',round(F(1,2)*1000)/1000);
elseif t==2set(handles.xF1,'Visible','on');set(handles.yF1,'Visible','on');set(handles.xF2,'Visible','on');set(handles.yF2,'Visible','on');set(handles.xF1,'String',round(F(1,1)*1000)/1000);set(handles.yF1,'String',round(F(1,2)*1000)/1000);set(handles.xF2,'String',round(F(2,1)*1000)/1000);set(handles.yF2,'String',round(F(2,2)*1000)/1000);
endhold on;
%水管的铺设路线
plot(0,yM,'r.','markersize',30);
if s==11   %情形1line([0,xA],[yM,yA],'linewidth',2.5,'color','k');if t==1plot(F(1,1),F(1,2),'o','markersize',9,'linewidth',3);endline([xA,F(1,1)],[yA,F(1,2)],'linewidth',2.5,'color','k');line([xB,F(1,1)],[yB,F(1,2)],'linewidth',2.5,'color','k');line([xC,F(1,1)],[yC,F(1,2)],'linewidth',2.5,'color','k');
elseif s==12   %情形1line([0,xB],[yM,yB],'linewidth',2.5,'color','k');if t==1plot(F(1,1),F(1,2),'o','markersize',9,'linewidth',3);endline([xA,F(1,1)],[yA,F(1,2)],'linewidth',2.5,'color','k');line([xB,F(1,1)],[yB,F(1,2)],'linewidth',2.5,'color','k');line([xC,F(1,1)],[yC,F(1,2)],'linewidth',2.5,'color','k');
elseif s==13   %情形1line([0,xC],[yM,yC],'linewidth',2.5,'color','k');if t==1plot(F(1,1),F(1,2),'o','markersize',9,'linewidth',3);endline([xA,F(1,1)],[yA,F(1,2)],'linewidth',2.5,'color','k');line([xB,F(1,1)],[yB,F(1,2)],'linewidth',2.5,'color','k');line([xC,F(1,1)],[yC,F(1,2)],'linewidth',2.5,'color','k');
elseif s==2   %情形2plot(F(1,1),F(1,2),'o','markersize',9,'linewidth',3);line([0,F(1,1)],[yM,F(1,2)],'linewidth',2.5,'color','k');line([xA,F(1,1)],[yA,F(1,2)],'linewidth',2.5,'color','k');if t==2plot(F(2,1),F(2,2),'o','markersize',9,'linewidth',3);endline([F(2,1),F(1,1)],[F(2,2),F(1,2)],'linewidth',2.5,'color','k');line([F(2,1),xB],[F(2,2),yB],'linewidth',2.5,'color','k');line([F(2,1),xC],[F(2,2),yC],'linewidth',2.5,'color','k');
elseif s==3   %情形3plot(F(1,1),F(1,2),'o','markersize',9,'linewidth',3);line([0,F(1,1)],[yM,F(1,2)],'linewidth',2.5,'color','k');line([xC,F(1,1)],[yC,F(1,2)],'linewidth',2.5,'color','k');if t==2plot(F(2,1),F(2,2),'o','markersize',9,'linewidth',3);endline([F(2,1),F(1,1)],[F(2,2),F(1,2)],'linewidth',2.5,'color','k');line([F(2,1),xB],[F(2,2),yB],'linewidth',2.5,'color','k');line([F(2,1),xA],[F(2,2),yA],'linewidth',2.5,'color','k');
elseif s==4||s==5   %情形4或情形5plot(F(1,1),F(1,2),'o','markersize',9,'linewidth',3);line([0,F(1,1)],[yM,F(1,2)],'linewidth',2.5,'color','k');line([xB,F(1,1)],[yB,F(1,2)],'linewidth',2.5,'color','k');if t==2plot(F(2,1),F(2,2),'o','markersize',9,'linewidth',3);endline([F(2,1),F(1,1)],[F(2,2),F(1,2)],'linewidth',2.5,'color','k');line([F(2,1),xC],[F(2,2),yC],'linewidth',2.5,'color','k');line([F(2,1),xA],[F(2,2),yA],'linewidth',2.5,'color','k');
elseif s==6   %情形6if t==1plot(F(1,1),F(1,2),'o','markersize',9,'linewidth',3);endline([0,F(1,1)],[yM,F(1,2)],'linewidth',2.5,'color','k');line([xA,F(1,1)],[yA,F(1,2)],'linewidth',2.5,'color','k');line([xB,F(1,1)],[yB,F(1,2)],'linewidth',2.5,'color','k');line([xB,xC],[yB,yC],'linewidth',2.5,'color','k');
elseif s==7   %情形7if t==1plot(F(1,1),F(1,2),'o','markersize',9,'linewidth',3);endline([0,F(1,1)],[yM,F(1,2)],'linewidth',2.5,'color','k');line([xC,F(1,1)],[yC,F(1,2)],'linewidth',2.5,'color','k');line([xB,F(1,1)],[yB,F(1,2)],'linewidth',2.5,'color','k');line([xB,xA],[yB,yA],'linewidth',2.5,'color','k');
endfunction figure1_WindowButtonDownFcn(hObject, eventdata, handles)
%鼠标选择村庄global start;   %坐标轴中是否有村庄global bd;   %鼠标是否选中村庄
global bu;   %鼠标是否释放
global bx;   %选中的村庄号global xA;   %村庄A的横坐标
global xB;   %村庄B的横坐标
global xC;   %村庄C的横坐标if start==1   %坐标轴中是否有村庄bd=0;bu=0;bx=1;pt=get(gca,'CurrentPoint');   %获取鼠标单击位置的坐标x=pt(1,1);y=pt(1,2);%鼠标是否选中村庄if x>=xA-0.05&&x<=xA+0.05&&y>=3.5-0.05&&y<=3.5+0.05%选中村庄Abd=1;bx=1;elseif x>=xB-0.05&&x<=xB+0.05&&y>=2.5-0.05&&y<=2.5+0.05%选中村庄Bbd=1;bx=2;elseif x>=xC-0.05&&x<=xC+0.05&&y>=0.5-0.05&&y<=0.5+0.05%选中村庄Cbd=1;bx=3;end
endfunction figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
%鼠标拖动村庄global start;   %坐标轴中是否有村庄global bd;   %鼠标是否选中村庄
global bu;   %鼠标是否释放
global bx;   %选中的村庄号global xA;   %村庄A的横坐标
global xB;   %村庄B的横坐标
global xC;   %村庄C的横坐标if start==1   %坐标轴中是否有村庄if bd==1&&bu==0pt=get(gca,'CurrentPoint');x=pt(1,1);%鼠标位置超出范围if x<0x=0;elseif x>4x=4;endcla;%初始化坐标轴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,'String',0);set(handles.yF1,'String',0);set(handles.xF2,'String',0);set(handles.yF2,'String',0);if bx==1   %选中村庄AxA=x;elseif bx==2   %选中村庄BxB=x;elseif bx==3   %选中村庄CxC=x;end%更新村庄A,B,C位置plot(xA,3.5,'k.','markersize',25);plot(xB,2.5,'k.','markersize',25);plot(xC,0.5,'k.','markersize',25);%计算水厂位置,S点坐标等[ts,yM,F,t,s]=Short(xA,3.5,xB,2.5,xC,0.5);%在坐标轴中绘图plottu(ts,yM,F,t,s,handles,xA,3.5,xB,2.5,xC,0.5);end
endfunction figure1_WindowButtonUpFcn(hObject, eventdata, handles)
%释放鼠标global start;   %坐标轴中是否有村庄global bu;   %鼠标是否释放if start==1bu=1;
end

三村合建水厂问题研究 (代码)相关推荐

  1. 读债务危机0901:第三部分48个案例研究概要-核心术语表 1、国际收支差额:一个国家/货币区的个人或机构与世界其他地区之间进行的所有交易的余额。 2、国际收支危机:经济危机的一种,表现为一国的国际收

    graph TD; A–>读债务危机0901:第三部分48个案例研究概要-核心术语表 1.国际收支差额:一个国家/货币区的个人或机构与世界其他地区之间进行的所有交易的余额. 2.国际收支危机:经 ...

  2. 统计学习导论之R语言应用(三):线性回归R语言代码实战

    统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...

  3. 2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解

    更新时间:2023-2-19 16:30 相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详 ...

  4. ESP8266从点灯到遥控小车(三)——组装小车,0代码开发APP控制小车

    ESP8266从点灯到APP遥控小车(三)--组装小车,0代码开发APP控制小车 文章目录 ESP8266从点灯到APP遥控小车(三)--组装小车,0代码开发APP控制小车 所需组件 一.小车所需组件 ...

  5. 最大熵,三硬币模型的R语言代码

    #最大熵算法 #< 统计学习方法>最大熵,三硬币模型的R语言代码 有3个硬币,分布为A.B.C,硬币正面的概率是pai,p,q.投币实验如下,先投A,如果A是正面,即A=1,那么选择投B: ...

  6. 【人工智能简史】第三章 第一个AI研究的黄金时代

    目录 ​编辑 第三章 第一个 AI 研究的黄金时代 第一节:早期 AI 研究的背景与突破

  7. 三图并列jquery焦点图代码

    效果如下: 主要代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  8. 论文自动转代码!IBM印度大三实习生搞了个神奇研究(已中AAAI)

    李林 岳排槐 发自 凹非寺 量子位 出品 | 公众号 QbitAI 深度学习的论文越来越多了~ 多到什么程度?Google scholar的数据显示,2016年以来,人工智能领域新增的论文已经超过3. ...

  9. 我们采访了三位学生:他们写代码、95 后、来自大陆和台湾

    原创:HyperAI超神经 关键词:学生 开源社区 95后 自古英雄出少年,技术领域也是这样. 1969 年 Unix 在 AT&T 贝尔实验室诞生,不久后 UCB 的两名在校研究生 Bill ...

  10. PIEGEE下载三款10米土地利用数据代码

    0.背景 GEE已经上线了Esri和ESA的10米土地利用数据,PIE也上线了FROM_GLC的10米土地利用数据.汇总了这三款数据的下载方法. 1.ESA的10米数据下载 第一步是设置参数,并加载E ...

最新文章

  1. 微博polg什么意思_贾磊:广东发微博给CBA造成了负面影响 方硕的意思可能没表达清楚...
  2. 牛客练习赛32 -- Xor Path
  3. iptables使用ipt_connlimit限制连接数
  4. java ipv6校验_java - IPv6地址验证和规范化[关闭] - 堆栈内存溢出
  5. Common Lisp 函数 require 和 provide 源代码分析
  6. 自定义滚动条(Custom ScrollBar)
  7. crontab 日志_聊聊老板让我删除日志文件那些事儿
  8. 安装Oracle11g-client
  9. sql server 循环_学习SQL:SQL Server循环简介
  10. 获取连接无线路由客户机信息命令
  11. Storm原理及单机安装指南
  12. 沸点百度文库下载器v2.3.3.2绿色版
  13. ubuntu16.04下运行海康威视网络摄像头sdk(qtdemo)
  14. 【数据库】SQL语句大全
  15. jpg怎么转换成pdf?
  16. win10MATLAB如何完全卸载,怎么完全卸载cad_win10彻底卸载cad的图文步骤-系统城
  17. 互联网大厂数据分析面试常见问题及解法,建议收藏
  18. 建造者模式实现汽车组装工厂功能(Java代码实例)
  19. 解析ipa生成plist文件
  20. nrf uart for android,nrf connect

热门文章

  1. 【Python】模拟登陆并抓取拉勾网信息(selenium+phantomjs)
  2. Linux 安装NDK
  3. UCB CS285课程笔记目录
  4. 携程2021年校招笔试题[2021年10月21日19点-21点]
  5. python数字替换 携程校招
  6. 谷歌关闭中国地区音乐搜索服务与产品设计
  7. 1v1微信聊天测试点
  8. ubuntu录制屏幕及视频处理
  9. 记事本开发 dos下编译java 多个类文件_通过记事本编写的java代码通过()命令运行。_学小易找答案...
  10. 超好玩的css3-3d效果