0

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

在我的应用程序中,我将有一组点来描述可能是凸面或凹面的形状 - 我想绘制多边形。问题是点的顺序使得一个简单的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)被调用时,可以清楚地绘制一个多边形,在这种情况下是一个圆?

4

2 回答 2

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

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

于 2013-10-04T13:16:54.657 回答
1

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

继续你的例子,

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

恢复你原来的圈子。

于 2013-10-04T14:33:00.197 回答