在matlab中单击每次鼠标替换先前的绘图

时间:2014-01-31 17:17:13

标签: matlab loops plot

您好我试图让我的程序的第一部分从原点绘制一条线,长度为10,鼠标在绘图区域中单击的方向。我目前有这个:

[gx,gy,b] = ginput(1);

theta = atand(gy/gx);
theta = theta*(pi/180);
polar(theta,8,'-k')

在b~ = 3的循环内。即试图说点击鼠标左键,我希望它在点击方向上绘制一条线,当按下右键时...移动到程序的其余部分,线条保持在最后一次左键单击。

此外,当每次左键单击时,绘制的上一行应替换为新行。即一次只有一行在屏幕上。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果我正确地解释了您的问题,以下脚本适用于我。

figure
R=10; % desired line length
polar(0,R) % empty polar plot

b=0;
while b~=3
    [gx,gy,b]=ginput(1);
    if b~=3 % not a right mouse click
        theta=atan(gy/gx);
        if gx<0
            theta=theta+pi; % this is needed, because atan(gy/gx) will always range from -pi/2 to pi/2
        end
        polar([0 theta],[0 R],'-k')
    end
end

它的作用

使用带有R=10的极坐标图制作一个数字。接下来,启动循环。在循环中,调用ginput()函数。其输出存储在gxgy中。接下来,检查是否按下了鼠标右键。如果不是,则使用gxgy,就像使用反正切一样。如果gx<0,反正切仍将计算-pi / 2和pi / 2之间的角度theta,它位于极坐标图的右半部分。因此,如果是这种情况,则将pi添加到θ中。从原点[0,0]绘制黑线,半径为10,计算角度为θ。

如果在图中任意位置单击鼠标右键,则保留while循环并继续MATLAB。请注意,gxgy包含鼠标右键单击的位置,而不是之前(非右侧)鼠标单击。

这是预期的行为吗?如果没有,请告诉我,然后我可以看看我的代码是否可以改进。