Error using patch Vectors must be the same lengths.
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Varun Kumar
am 31 Mai 2019
Bearbeitet: Varun Kumar
am 3 Jun. 2019
function popupmenu7_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu7 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu7
v=get(handles.popupmenu7,'Value')
if v == 1
X1=get(handles.edit1, 'String');
X2=get(handles.edit4, 'String');
X3=get(handles.edit7, 'String');
X4=get(handles.edit10, 'String');
Z=[X1 X2 X3 X4]
elseif v == 2
Y1=get(handles.edit2, 'String');
Y2=get(handles.edit5, 'String');
Y3=get(handles.edit8, 'String');
Y4=get(handles.edit11, 'String');
Z=[Y1 Y2 Y3 Y4]
elseif v == 3
Z1=get(handles.edit3, 'String');
Z2=get(handles.edit6, 'String');
Z3=get(handles.edit9, 'String');
Z4=get(handles.edit12, 'String');
Z=[Z1 Z2 Z3 Z4]
end
image=uigetfile('*.png', 'File Selector');
imshow(image)
axes=handles.axes1;
hold on;
maxAllowablePoints = 5; % Whatever you want.
numPointsClicked = 0;
promptMessage = sprintf('Left click up to %d points.\nRight click when done.', maxAllowablePoints);
titleBarCaption = 'Continue?';
button = questdlg(promptMessage, titleBarCaption, 'Continue', 'Cancel', 'Continue');
if strcmpi(button, 'Cancel')
return;
end
while numPointsClicked < maxAllowablePoints
numPointsClicked = numPointsClicked + 1;
[x(numPointsClicked), y(numPointsClicked), button] = ginput(1)
if button == 3
% Exit loop if
break;
end
end
% Print to command window
x
y
Z
msgbox('Done collecting points');
patch(handles.axes1, x,y,Z, 'Facecolor', 'interp')
hold off
i am using this code to plot on the image but getting error as follows
Error using patch
Vectors must be the same lengths.
Error in imgplt3d>popupmenu7_Callback (line 643)
patch(handles.axes1, x,y,Z, 'Facecolor', 'interp')
Error in gui_mainfcn (line 96)
feval(varargin{:});
Error in imgplt3d (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in @(hObject,eventdata)imgplt3d('popupmenu7_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating uicontrol Callback
please help me
2 Kommentare
KSSV
am 31 Mai 2019
The error clearly says (x,y,Z) are of not same size. Check the dimensions of each.
Akzeptierte Antwort
Stephen23
am 3 Jun. 2019
Bearbeitet: Stephen23
am 3 Jun. 2019
The problem is very simple: you never actually convert the string data to numeric.
Replace all of your Z definitions with this:
Z = str2double({X1,X2,X3,X4});
You will also need to pay attention that x and y have the same number of elements as Z, or otherwise have permitted sizes according to the patch documentation (your code does not do this).
3 Kommentare
Geoff Hayes
am 3 Jun. 2019
varun - your verson of MATLAB may require you to use a property name to indicate the axes. Try doing
patch(x,y,Z, 'Facecolor', 'interp', 'Parent', handles.axes1)
Weitere Antworten (1)
Geoff Hayes
am 31 Mai 2019
Varun - your Z seems to be 1x4 array, but the x and y are 1x5. Your code
maxAllowablePoints = 5;
numPointsClicked = 0;
while numPointsClicked < maxAllowablePoints
numPointsClicked = numPointsClicked + 1;
[x(numPointsClicked), y(numPointsClicked), button] = ginput(1)
if button == 3
% Exit loop if
break;
end
end
Assuming that the button is never 3 (which I suppose it can) and since your numPointsClicked starts at zero, then your x and y can be (at most) of dmension 1x5. Just change maxAllowablePoints to 4 and you should be fine.
Siehe auch
Kategorien
Mehr zu Creating, Deleting, and Querying Graphics Objects finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

