我想问一下如何安排点来绘制一个封闭的多边形。
在我的应用程序中,我将有一组点描述可能是凸面或凹面的形状 - 我想绘制多边形。问题是点的顺序是这样的,直截了当的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)
时,可以清晰地绘制多边形,在这种情况下是一个圆圈?
答案 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))
恢复原来的圈子。