我是matlab的新手,我需要一些帮助。我正在尝试制作一些程序,你可以通过2次点击图片获得一些长度的东西。基本上它运作良好,但在尝试对它进行算法时遇到了问题。我使用ginput
获取坐标,然后使用毕达哥拉斯定理来处理它们并生成重要的变量z2
。那些我想要存储在矢量中的变量如此基本:我在图片上按push_button1
两次点击并获得一些z2,现在当我再次执行该过程时,我想将新旧的一个存储在同一个中向量
[z2_old z2_new]
。但基本上每当我试图制作这样的东西时,旧的值都会重写。
这是我的按钮代码:
function pushbutton1_Callback(hObject,EventData,handles)
%counter - number of press (working right)
counter = get(hObject, 'UserData') + 1;
set(hObject, 'UserData', counter);
set(handles.text1, 'String', sprintf('%d', counter));
% - ginput部分(工作正确)
c2 = ginput(2);
q3 = text(c2(1,1),c2(1,2),'X', ...
'HorizontalAlignment','center', ...
'Color', [1 1 0], ...
'FontSize',10);
q4 = text(c2(2,1),c2(2,2),'X', ...
'HorizontalAlignment','center', ...
'Color', [1 1 0], ...
'FontSize',10);
%创建z2变量(右侧工作)
x2=c2(1,1)-c2(2,1);
y2=c2(1,2)-c2(2,2);
z2=sqrt(x2*x2+y2*y2);
% - 获取向量的循环(不正常)
for i=1:counter
z(i,1)=z2
end
所以,基本上当我第一次运行按钮并且z2得到例如130,第二次60,第三次210m我想得到z = [130 60 210],现在我仍然得到像第一次按下的东西:z = [130],第二次按:z = [60 60],第三次按:z = [210 210 210],旧值每次丢失。我试图修复它很多方面,但它仍然无法正常工作。它只是我工作的一小部分,我几乎没时间用完了。
有人可以告诉我这个循环应该怎么样?我尝试了z(end+1)=z2
,z=[z z2]
,但结果始终相同。
非常感谢你的帮助。我真的很欣赏它。
答案 0 :(得分:0)
试试这个 删除for循环 写吧 Z [Z,Z2]
这应该每次都将z2添加到现有z的末尾。 如果它抛出一个错误,只需先给出z(0)= 0;一个开头的初始垃圾值。
答案 1 :(得分:0)
问题在于,每按一次按钮,它都会为z2
创建新值。即使计数器递增,但z2
始终是新值。因此,您需要在按钮的点击之间保存z2
。为此,您有handles
结构可用于GUI回调之间的数据存储。您需要进行两项更改 -
在guiname__OpeningFcn
-
guidata(hObject, handles);
内添加此行
handles.z2 =[];
编辑按钮回调函数 -
x2=c2(1,1)-c2(2,1)
y2=c2(1,2)-c2(2,2)
z2=sqrt(x2*x2+y2*y2)
z = [handles.z2 z2]
handles.z2 = z;
guidata(hObject,handles);
希望这对您有用,请告诉我们!