在Matlab中绘制星形图

时间:2014-10-12 14:51:21

标签: matlab matlab-figure

我不得不在matlab中绘制这个:
enter image description here

所以我写了下面的代码:

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);  

但是这给了我:enter image description here

这种方法不足以绘制第一个数字....是否有其他一些简短的方法...

3 个答案:

答案 0 :(得分:2)

您可以更好地定位数据点

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;

结果:
enter image description here

顺便说一句,这段代码适用于任何奇数nPoints - 只需尝试;)

答案 1 :(得分:1)

在我看来,你想构建一个star polygon,它具有所有点与其相邻点等距的属性,并且所有点都位于同一个圆上。

首先,我们生成所需的角度a(从x轴到连接原点与所需点的直线测量,参见wikipedia)。基于多边形,我们以这样的方式重新组合角度,即跳过所需数量的点(在下面的代码中,这是通过使用其他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);

答案 2 :(得分:0)

我手动尝试了:

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]);

我得到了他的:

enter image description here