欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

三村合建水厂问题研究 (代码)

发布时间:2023/12/16 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 三村合建水厂问题研究 (代码) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

问题描述:

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

总结

以上是生活随笔为你收集整理的三村合建水厂问题研究 (代码)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。