用Matlab绘制星形图形

用Matlab绘制星形图形,matlab,matlab-figure,Matlab,Matlab Figure,我必须在matlab中绘制此图: 因此,我编写了以下代码: x=[0.9 1 0.9 -0.9 0.7 0.7 -0.9 0.9]; y=[-1 0 1 -0.5 -0.8 0.8 -0.4 -1]; plot(x,y); 但这给了我: 此方法是否不足以绘制第一个图形…是否有其他简短的方法用于此…我手动尝试过: x = [-0.4 0.6 1 0.6 -0.4 -0.8 -0.8]; y = [-0.9 -0.7 0 0.7 0.9 0.4 -0.4]; x_ = [x,x]; y_

我必须在matlab中绘制此图:

因此,我编写了以下代码:

x=[0.9 1 0.9 -0.9 0.7 0.7 -0.9 0.9];
y=[-1 0 1 -0.5 -0.8 0.8 -0.4 -1];
plot(x,y);  
但这给了我:

此方法是否不足以绘制第一个图形…是否有其他简短的方法用于此…

我手动尝试过:

x = [-0.4 0.6 1 0.6 -0.4 -0.8 -0.8];
y = [-0.9 -0.7 0 0.7 0.9 0.4 -0.4];

x_ = [x,x];
y_ = [y,y];

figure;
hold on;
for ii=1:numel(x),
    scatter(x(ii),y(ii),'ro');
    plot([x_(ii),x_(ii+1+1)],[y_(ii),y_(ii+1+1)],'b-');
end
axis([-1 1 -1 1]);
我得到了他的:


在我看来,您似乎想要构造一个,它的特性是所有点与其相邻点的距离相等,并且所有点位于同一个圆上

首先,我们生成所需角度
a
(从x轴到连接原点和所需点的直线测量,请参见)。基于多边形,我们重新排列角度,从而跳过所需数量的点(在下面的代码中,这是通过使用其他
repmat
-实现的,但存在许多替代方案)

要将角度转换为平面中的实际点,我们需要正弦和余弦值,然后我们可以绘制点和线。将这些放在一起将生成以下代码,这将生成所需的图形

n = 7;
a = linspace(0,2*pi,n+1);
skip = 1;

b = [repmat(a(1:end-1),1,skip+1) a(end)];
a = b(1:skip+1:end);

figure;
clf;
hold on;
plot(cos(a),sin(a),'b-');
plot(cos(a(1:end-1)),sin(a(1:end-1)),'ro');

axis([-1 1 -1 1])
axis equal

稍微少一点的是像这样计算向量
A

a = mod(linspace(0,(skip+1)*2*pi,n+1),(skip+1)*2*pi);

您可以更好地定位数据点

nPoints = 7;
th = linspace(-2*pi, 2*pi, 2*nPoints+1);%// extra point to close the curve
r = 1;
x = r*cos(th);
y = r*sin(th);
scatter( x, y, 'ro' );
hold on;
plot( x(1:2:end), y(1:2:end), 'b-' );
axis equal;
结果为:


顺便说一句,此代码适用于任何奇数
npoint
-请尝试;)

谢谢你的回答,但你能解释一下吗:当我删除x=rcos(th)结尾的分号时;y=rsin(th);为什么图形会重复…MATLAB打印不以分号结尾的表达式的值。由于缺少分号,它会再次显示绘图,因此会重复自身。