我不得不在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);
但是这给了我:
这种方法不足以绘制第一个数字....是否有其他一些简短的方法...
答案 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;
结果:
顺便说一句,这段代码适用于任何奇数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]);
我得到了他的: