2015-05-07 23 views
1

我有一个Matlab程序,要求用户在场景中围绕人类绘制一个矩形(后来使用imcrop提取该区域)。我需要强制用户画一个正方形。我正在使用imrect函数,但我无法强制正方形,也没有找到有关如何操作的文档。注解 - 使用不正确的方式强制使用正方形

回答

4

看来imrect可以将position-constraining function作为输入参数。这个功能规定如下:使用 语法

每当对象被移动,因为 鼠标拖动的,约束函数被调用:

constrained_position = fcn(new_position) 

位置是的一个矢量表格[xleft ybottom width height]

那么试试这个:

axis equal %// same sccale on both axes 
axis manual %// freeze axes size 
h = imrect('PositionConstraintFcn', @(x) [x(1) x(2) min(x(3),x(4))*[1 1]]) 
4

最简单的方法将是矩形创建过程中设置setFixedAspectRatioMode方法true,初步绘制一个正方形。 (检查here)。

例子:

%// Make sure it's initially a square!! 
hRect = imrect(gca, [10 10 100 100]); 

setFixedAspectRatioMode(hRect,1) 

那么无论你怎么改变位置,它仍将是一个正方形。但请注意,与Luis的解决方案相反,用户不能指定正方形的初始位置。

+0

这比我的回答(+1)更简单。在下面,它需要最初绘制正方形(而不是用户直接绘制它) –

+0

是的,你是对的@LuisMendo我忽略了那部分哎呀,我会将该信息添加到答案。为你+1,你的方法是相当优雅的! –