РУКОВОДСТВО ПО Matlab: как я могу разбрасываться, когда пользователь нажимает?

Я хочу запрограммировать раздел «axes1» нового проекта GUIDE таким образом, чтобы он разбрасывал точки внутри осей, когда пользователь нажимал на них.

Я новичок в GUIDE и не совсем понимаю, как работают hObject, handles и т.д. То, что я собрал до сих пор из других сообщений, представляет собой следующий фрагмент кода:

% --- Executes on mouse press over axes background.

function axes1_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to axes1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%axesHandle  = get(hObject,'Parent');
coordinates = get(hObject,'CurrentPoint'); 
coordinates = coordinates(1,1:2);
scatter(coordinates(1),coordinates(2));

Я не использую раздел «get (hObject, «Parent»)», потому что он использовался в случае, если вы используете изображение для отображения по осям, а это не мой случай.

Может кто-нибудь объяснить, как я могу это сделать?

Спасибо заранее за ваше время


person alvaro.delaserna    schedule 30.01.2014    source источник
comment
Чем этот код отличается от того, что вы хотите? Упреждающий потенциально важный момент: установлен ли axes1 hold on?   -  person Notlikethat    schedule 31.01.2014
comment
Этот код должен выполняться при нажатии мыши на фоне осей. Для меня это означает, что он выполняется, если я нажимаю на оси, независимо от положения стрелки мыши, и он получает координаты стрелки мыши и раскидывает их после щелчка, но ничего не делает. Я попытался добавить строку кода, чтобы проверить, правильно ли она выполняется (например, я добавил «a = 123»), чтобы она отображалась на экране Matlab, если функция была вызвана правильно, но ничего не произошло, поэтому я думаю, что оси не работают. работает так же просто, как я сначала подумал   -  person alvaro.delaserna    schedule 01.02.2014
comment
Определенно ли свойство ButtonDownFcn для axes1 установлено в этой функции в GUIDE? Если оси прозрачны (Color == 'none'), они не будут получать щелчки (они переходят к рисунку внизу). Точно так же, если вы нажмете, например. линия или изображение на осях, событие щелчка переходит к этому объекту, а не к самим осям.   -  person Notlikethat    schedule 01.02.2014
comment
мой код выглядит следующим образом: % --- Executes on mouse press over axes background. function axes1_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to axes1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %axesHandle = get(hObject,'Parent'); coordinates = get(hObject,'CurrentPoint'); coordinates = coordinates(1,1:2); scatter(coordinates(1),coordinates(2)); я не изменил его на прозрачность, можно ли сделать его прозрачным по умолчанию?   -  person alvaro.delaserna    schedule 01.02.2014


Ответы (1)


Я решил это несколько месяцев назад, но не опубликовал решение!

Это было проще, чем я думал, мне просто нужно было сохранить каждое нажатие мыши как точку (x, y), а затем использовать plot:

% ND = Nodes in the network
ND = zeros(N,2);
ND(1,:) = ginput(1);
plot(ND(1,1),ND(1,2),'ko','MarkerSize',12);
hold on;
for i=2:N
    ND(i,:) = ginput(1);
    plot(ND(i,1),ND(i,2),'ko','MarkerSize',12);
end
person alvaro.delaserna    schedule 25.07.2014