Matlab滑块控件:使一个滑块“环回”的Angular 达到2 π或零

dy1byipe  于 2023-08-06  发布在  Matlab
关注(0)|答案(1)|浏览(170)

我正在制作一个用户界面,它的输入代表一个Angular ,可以用uicontrol滑块元素进行设置。预期Angular 可以环绕圆,因此我希望当用户增加Angular 超过最大值(2 pi)时,拇指和值将“增加”到零(并且类似地,当用户减小Angular 超过最小值(零)时,拇指和值将减小到2 pi,因此通过环绕间隔而正常表现。

function simplest_working_example
    h1=figure();

    init_phi1=45;
    locinfo.phi1=uicontrol('Parent',h1,'style','slider','Min',0,'Max',360,'Value',init_phi1,'Position',[20 20 500 20],'Callback',{@update_fcn});

    function update_fcn(~,~)
        S1=[0 0];
        l1=2;
        E1=[l1*cos(locinfo.phi1.Value*2*pi/360) l1*sin(locinfo.phi1.Value*2*pi/360)];
        plot([S1(1) E1(1)],[S1(2) E1(2)],'o-');hold on
        xlim([-10 10]); ylim([-10 10]);axis square
        hold off
    end

end

字符串
我尝试编辑滑块回调函数,但是当用户单击向上/向下箭头并且滑块已经处于最大/最小值时,它不会触发(参见this stackoverflow question)。有没有什么技巧可以做到这一点,希望没有文档化的Java层。

bq8i3lrv

bq8i3lrv1#

您可以在update_fcn(~,~)的开头添加以下内容:

if locinfo.phi1.Value==360
    locinfo.phi1.Value = 0;
elseif locinfo.phi1.Value==0
    locinfo.phi1.Value = 360;
end

字符串
这会产生环回,但如果您连续按下箭头,则需要再次单击它。

相关问题