matlab指南:将数据从循环中存储到向量中

时间:2014-03-15 15:46:30

标签: matlab user-interface vector

我是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)=z2z=[z z2],但结果始终相同。

非常感谢你的帮助。我真的很欣赏它。

2 个答案:

答案 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);

希望这对您有用,请告诉我们!