問題描述:
A村、B村和C村都在河流(Y軸)的東面,A村在y=3.5 km的路旁,B村在y=2.5 km的路旁,C村在y=0.5 km的路旁,他們要在河邊合建一間水廠。請設(shè)計使水管總長最短的方案。
設(shè)計要求:
(1)使用matlab-GUI軟件編程實現(xiàn);
(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);%初始化數(shù)據(jù)
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);%初始化數(shù)據(jù)
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','問題描述關(guān)');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點個數(shù),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點是否在三角形內(nèi)部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的兩側(cè)xD=(xA+xB)/2-(yA-yB)*sqrt(3)/2;
yD=(yA+yB)/2+(xA-xB)*sqrt(3)/2;
%判斷點D和點C是否在直線AB的兩側(cè)
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); %取小數(shù)點后三位
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點個數(shù)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;
%水管的鋪設(shè)路線
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);%初始化數(shù)據(jù)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
總結(jié)
以上是生活随笔為你收集整理的三村合建水厂问题研究 (代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。