我有一个Matlab程序,要求用户在场景中围绕人类绘制一个矩形(后来使用imcrop
提取该区域)。我需要强制用户画一个正方形。我正在使用imrect
函数,但我无法强制正方形,也没有找到有关如何操作的文档。注解 - 使用不正确的方式强制使用正方形
1
A
回答
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的解决方案相反,用户不能指定正方形的初始位置。
相关问题
- 1. 强制FloatLayout为正方形?
- 2. Monotouch:使用NSNotificationCenter的正确方式
- 3. 正确的方式使用AJAX
- 4. 正确的方法形式
- 5. 正确的方式使用颠覆
- 6. 正确的方式提交使用PHP/JavaScript的形式
- 7. LibGDX正确的方式使用AssetManager
- 8. 以正确的方式使用线程
- 9. 正确的方式来使用Response.Redirect
- 10. 强制使用CMake进行32位编译的正确方法
- 11. 正确的方式与redux使用axios
- 12. 我使用正确的方式吗?
- 13. 正确使用JS链接的方式
- 14. 正确的方式使用$ .tmpl jQuery中
- 15. 使用Object.create()正确的方式
- 16. 正确的方式使用AJAX
- 17. “正确”的方式使用SQL
- 18. 正确的方式使用StackExchange.Redis
- 19. 正确的方式来使用JQuery $ .post
- 20. 使用计时器 - 正确的方式
- 21. 使用cancan正确的方式
- 22. 使用正确的方法
- 23. 使用TurtleGraphics绘制同心正方形
- 24. 不正确的形式方法
- 25. OnPaint方法不绘制矩形正确
- 26. 使用弹簧形式的正确方法
- 27. 使用条件注释以正确的方式
- 28. “do..while”方法的不正确使用
- 29. 正确使用MapPath方法
- 30. 正确使用updateOrCreate方法
这比我的回答(+1)更简单。在下面,它需要最初绘制正方形(而不是用户直接绘制它) –
是的,你是对的@LuisMendo我忽略了那部分哎呀,我会将该信息添加到答案。为你+1,你的方法是相当优雅的! –