我正在尝试在matlab中做的,用户输入点和它们之间的连接的GUI。他还输入了一张地图照片(PNG图片)和坐标轴比例(坐标轴X将从0缩放到比例)。
最后(在他输入所有输入之后),我想向用户显示具有所有节点和连接的图像。

我有5个Matlab文件-screen1.m,screen2.m,screen3.m,screen4.m,globalParams.m

在globalParams中,我具有全局参数,因此可以在屏幕GUI到屏幕GUI中使用它们。在screen1中,用户输入节点数(例如5),然后输入地图。当他按下“下一步”按钮时,回调函数将调用“ screen2();”。在screen2.m中,用户输入(x,y)coordiante,并且当他按下“下一步”按钮时,回调函数将调用“ screen3();”。
在screen3中,用户更新所有节点之间的所有连接。完成后,他按“完成”按钮,回调函数将调用“ screen4”。在screen4中,我在GUI轴中添加了代码,然后在其中执行了“ imshow”。
但我要做的真正的事情是将轴从0更改为缩放比例(而不是从0更改为1),我还想放置图像(我用imshow做过),最后一个也是最重要的我要放在图像上的是节点和它们之间的线(如果用户在节点i和节点j之间添加连接,因此图像中它们之间是一条线。也许要用不同的颜色放置这些线和节点这样我们就可以区分线和节点)
在screen4中,我们有:xNodes和yNodes-节点“ x”和“ y”轴的2个数组。((xNodes(1),yNodes(1)是node1的位置)。还有图像名称的Scale和fullPathName。也有hopsMatrix,它是2D数组-如果hopsMatrix(i,j)= 1,则i与j之间存在连接。

一些代码:

在screen1中,上传图片和numOfNodes并缩放:

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global fullPathName;
[fileName pathName] = uigetfile({'*.png'},'File Selector');
fullPathName = strcat(pathName, fileName);
imshow(fullPathName);

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global numOfNodes;
global scale;
scale = str2num(get(handles.edit1, 'string'));
numOfNodes = str2num(get(handles.edit2, 'string'));


在screen4中,这里有所有输入,并且我想将节点放在地图中(我不知道该怎么做,所以现在这是代码):

% --- Executes just before screen4 is made visible.
function screen4_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to screen4 (see VARARGIN)

global fullPathName;
global xNodes;
global yNodes;
global scale;
global hopsMatrix;
img = imread(fullPathName);
imshow(fullPathName);

最佳答案

这是某人给我的解决方案。我会分享的

% --- Executes just before screen4 is made visible.
function screen4_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to screen4 (see VARARGIN)

global fullPathName;
imshow(fullPathName);
global xNodes;
global yNodes;
global scale;
global hopsMatrix;

x_original=get(handles.axes1,'xlim');
y_original=get(handles.axes1,'ylim');
min_lim=min(x_original(2),y_original(2));
max_lim=max(x_original(1),y_original(1));
xlim([max_lim,min_lim])
ylim([max_lim,min_lim])
dist=min_lim-max_lim;
set(handles.axes1)
hold on
plot((xNodes(:,1))*dist/scale+x_original(1),min_lim+y_original(1)-(yNodes(:,1))*dist/scale,'rx','markersize',8,'linewidth',2)
[row,col] = find(hopsMatrix);
for i=1:length(row)
    plot((xNodes([row(i),1;col(i),1]))*dist/scale+x_original(1),min_lim+y_original(1)-(yNodes([row(i),1;col(i),1]))*dist/scale,'k','linewidth',2)

end

10-05 18:01
查看更多