2013-07-03 2 views
1

저는 MATLAB에서 마우스 입력을 사용하여 프로그램의 매개 변수를 실시간으로 설정할 수 있기를 바랍니다. 한 그림에서 계속해서 비디오를 재생할 수 있습니다. 업데이트 할 특정 지점을 클릭 할 수 있기를 바랍니다. 그러나 ginput에 전화하면 클릭 할 때까지 그림이 업데이트되지 않습니다.Matlab에서 이벤트를 기다리는 동안 그림을 업데이트 하시겠습니까?

while 1 
    frame = step(FrameReader); 
    image(frame); 
    [x,y] = ginput(1); 
    pause(0.1); 
end 

영화가 백그라운드에서 원활하게 실행할 수 ginput 전화 ginput, 또는 다른 방법을 사용하는 것보다 그림을 마우스 클릭 리스너를 소개하는 또 다른 방법이 있나요 : 지금 내 코드는 다음과 같이 보입니다 ?

+0

http://stackoverflow.com/questions/4546499/matlab-buttondownfcn을 확인하십시오. – grantnz

답변

1

grantnz과 같이 'ButtonDownFcn' (그림 또는 축) 속성을 사용할 수 있습니다. ginput은 비 실시간 작업이있을 때 더 편리합니다. 모든

먼저, 하이 레벨 기능 등 plot, imshow, image 등과 같은 'HitTest''ButtonDownFcn' 같은 축 특성의 대부분을 재설정 않습니다. 따라서 이러한 함수를 사용할 때마다 업데이트이 필요합니다. 축은 속성을 처리합니다. 일반적으로 고주파 루프에서 이러한 높은 수준의 기능을 사용하면 성능을 향상시키지 않아야합니다. 당신이 그림의 'ButtonDownFcn' 사용할 수 있습니다 grantnz 암시 축'ButtonDownFcn'를 설정하는 것 외에도

. 두 번째 경우에는 축의 선택 가능성을 해제해야합니다 (축의 'HitTest'Off으로 설정).

여기에 애니메이션 애니메이션이 있습니다. 애니메이션 축을 클릭하고 축의 'CurrentPoint'을 볼 수 있습니다. 'ButtonDownFcn'plot 후마다 업데이트됩니다

% Stop button 
uicontrol(... 
    'Style','pushbutton', 'String', 'Stop',... 
    'Units','Normalized', 'Position', [0.4 0.1 0.2 0.1],... 
    'Callback', 'run = 0;'); 

% Axes 
ax = axes(... 
    'Units','Normalized',... 
    'OuterPosition', [0 0.2 1 0.8]); 

run = 1; 
t = 0; 
while run 
    t = t + 0.01; x = t:0.01:t+2; 
    h = plot(ax, x, sin(x)); 
    set(ax, 'ButtonDownFcn', 'get(ax, ''CurrentPoint'')'); 
    xlim([x(1) x(end)]); ylim([-1 1]); 
    pause(0.01); 
end 

.

그림의 'CurrentPoint'을 얻을 수도 있습니다. 그렇다면 의 정규화 된 위치를 얻으려면 그림에 대해 Normalized 단위를 설정해야합니다.

관련 문제