如何安排绘制闭合多边形的点?

时间:2013-10-04 12:58:16

标签: matlab plot polygon nearest-neighbor

我想问一下如何安排点来绘制一个封闭的多边形。

在我的应用程序中,我将有一组点描述可能是凸面或凹面的形状 - 我想绘制多边形。问题是点的顺序是这样的,直截了当的plot命令不会生成我想要的多边形。

例如:

dtheta = pi/150;
theta  = (-pi:dtheta:(pi-dtheta))';
X1   = cos(theta); 
X2   = sin(theta);
[n1,In1]=sort(X1);  % sort is intentional here
n2=X2(In1);

现在,

plot(n1,n2,'.')

给了我一个圆形的点数排列

然而,使用

plot(n1,n2)

由于点的连接顺序,圆圈根本不明显。

有没有办法安排(n1,n2),以便在调用plot(n1,n2)时,可以清晰地绘制多边形,在这种情况下是一个圆圈?

2 个答案:

答案 0 :(得分:2)

不要先排序。相反,做

dtheta = pi/150;
theta  = (-pi:dtheta:(pi-dtheta))';
X1   = cos(theta); 
X2   = sin(theta);
plot(X1, X2);

请注意,这不会关闭多边形,因为你的theta不会“完全绕过”。如果你定义了

theta = linspace(-pi, pi, 301); % 301 = 2 * 150 + 1 for repeated end point

您将以相同的方式间隔点,但现在您将重复第一个点作为最后一个点并关闭多边形。

答案 1 :(得分:1)

您可以使用convhull。如果给定的点实际上定义了正多边形的边或另一个凸形,那么它们都应该包含在凸包中。该函数以适合绘图的顺序将指数返回到点。

继续你的例子,

k = convhull(n1, n2);
plot(n1(k), n2(k))

恢复原来的圈子。