首页 > 解决方案 > 如何在 Matlab GUI 中移动具有相同按钮的形状以及当弹丸击中形状时如何计算得分?

问题描述

我是 MATLAB 新手。最近我一直在做一个项目。

问题 1:我必须使用一个按钮在特定的 GUI 轴上生成一个矩形,其位置范围(x 轴)为 30 到 50。我的意思是我应该能够使用同一个按钮在范围内移动矩形。问题是我可以创建一个静态矩形,但我不知道如何使用正确的语法移动矩形。

问题2:该项目就像一个弹丸击中矩形(表示范围)得分将被计算但我不知道如何计算得分。

以下是用于 GUI 的所有功能。矩形放置的放置按钮功能和用于投掷弹丸和计算分数的 Throwbutton 功能。


% --- Executes just before Project is made visible.
function Project_OpeningFcn(hObject, eventdata, handles, varargin)



handles.output = hObject;
guidata(hObject, handles);
handles.throwbutton.Enable = 'off';
handles.slider1.Enable = 'off';
handles.slider2.Enable = 'off';



% --- Executes on button press in throwbutton.
function throwbutton_Callback(hObject, eventdata, handles)
get(handles.throwbutton,'String');
handles.slider1.Enable = 'off';
handles.slider2.Enable = 'off';
u = get(handles.slider1,'Value');
a = get(handles.slider2,'Value');

g = 9.8;
t = 0:0.03:10;
a_theta = unitsratio('rad', 'deg')*a;
ux = u*cos(a_theta);
uy = u*sin(a_theta);
x = ux*t;
y = uy*t - 0.5*g*t.^2;
for i = 1:size(x,2)
    if(i>1 && y(i)<=0)
        break;
    end
    axes(handles.axes2);
    plot(x(i),y(i),'b*')
    hold on;
    pause(0.02);
end
R = sqrt((x.^2)+(y.^2));
global score;
score = 0;
if (R>30)
    
    score = score+1;
    s1 = num2str(score);
    set(handles.edit3,'String',s1);
else
    s2 = num2str(score);
    set(handles.edit3,'String',s2);
    

end


function placebutton_Callback(hObject, eventdata, handles)
guidata(hObject, handles);

get(handles.placebutton,'string');
handles.slider1.Enable = 'on';
handles.slider2.Enable = 'on';

        axes(handles.axes2);
        rectangle('Position',[30 0 5 2], 'EdgeColor','c',...
        'LineWidth',3);
        hold on;

标签: matlabmatlab-figurematlab-guide

解决方案


推荐阅读