1

Matlab中简单的圆角矩形代码可以写成如下。

rectangle('Position',[0,-1.37/2,3.75,1.37],...
      'Curvature',[1],...
     'LineWidth',1,'LineStyle','-')
daspect([1,1,1])

如何得到这个图的x和y坐标数组?

4

2 回答 2

1

要获得轴单位边界,请执行以下操作:

axisUnits = axis(axesHandle) % axesHandle could be gca

axisUnits将是一个四元素数组,语法如下:[xlowlim xhighlim ylowlim yhighlim],它还将包含 3-D 绘图的 zlow 和 zhigh。

但我认为这不是你需要知道的。检查矩形属性的 matlab 文档,我们发现:

位置四元素向量 [x,y,width,height]

矩形的位置和大小。以坐标区的数据单位指定矩形的位置和大小。x、y 定义的点指定矩形的一个角,宽度和高度分别定义沿 x 轴和 y 轴的单位大小。

它也记录在矩形文档中:

rectangle('Position',[x,y,w,h]) 从点 x,y 绘制矩形,宽度为 w,高度为 h。以坐标区数据单位指定值。

看看这是否说明了你想要的。你有一个从 -100 到 100 的 x 轴和从 5 到 15 的 y 轴。假设你想在 x 中放置一个从 -30 到 -20 的矩形,在 y 中放置一个 8 到 10 的矩形。

rectangle('Position',[-30,8,10,2]);
于 2013-08-16T16:17:24.500 回答
0

正如评论所解释的,似乎没有直接的方法来查询由创建的图形rectangle并提取 x/y 坐标。另一方面,我可以想出两种简单的策略来获得坐标,这些坐标将密切再现矩形生成的曲线:

(1) 将图形另存为图像(比如.png)并处理图像以提取曲线对应的点。一定程度的按摩是必要的,但如果生硬,这相对简单,我希望与从轴对象获取数据相比,执行代码会有些慢。

(2) 编写自己的代码来绘制一个带有弯曲边缘的矩形。虽然精确地重新创建 matlab 绘制的内容可能不是那么简单,但您可能会对自己的版本感到满意。

您是否选择其中一种方法归结为(a)您认为可以接受的执行速度(b)您需要多接近地复制rectangle屏幕上绘制的内容(c)您是否有图像处理例程,例如用于读取图像文件。

编辑

如果你有图像处理工具箱,你可以得到一组代表矩形的点,如下所示:

h=rectangle('Position',[0,-1.37/2,3.75,1.37],...
      'Curvature',[1],...
     'LineWidth',1,'LineStyle','-')
daspect([1,1,1])
axis off
saveas(gca,'test.png');
im = imread('test.png');
im = rgb2gray(im);
figure, imshow(im)

请注意,您仍然需要应用阈值来从图像中选择相关点,然后转换坐标系并重新排列点,以便正确显示为连接集。您可能还想修改初始图像文件的分辨率或应用图像处理功能以获得平滑曲线。

于 2013-08-16T18:39:15.690 回答