颤抖没有绘制箭头很多蓝色,matlab

有人可以告诉我,当我没有真正获得箭头时,我在做颤抖绘图功能时会出现什么问题,它只是填充空白区域,并显示很多蓝色。查看下面的图像,然后查看我的代码。

这只是我的轮廓的一部分,因为如果我试图将其拉大,这会消耗更多的力量。 但是我的功能,轮廓和其他一切都起作用,这只是我遇到麻烦的颤抖。

interval = -100:100;

[X Y] = meshgrid(interval, interval);

h = figure;
contour(X, Y, Z);

hold on;

[FX,FY] = gradient(-Z);
quiver(X, Y, FX, FY);

hold off;

如果我让我的矩阵更稀疏,例如“interval = linspace(-800,1600,1200);” 结果将如下所示: 在这里输入图像描述

编辑:我需要的是这样的轮廓线,但箭头应该与他们一起流动。 现在这些只是看起来像点,即使我进一步放大。 如果我缩小整个窗口将是蓝色的。

如果有人想用它来解决这个问题,这是整个剧本。

m1 = 1;
m2 = 0.4;
r1 = [1167 0 0];
r2 = [-467 0 0];
G = 9.82;

w = sqrt( G*(m1+m2) / norm(r1-r2)^3 );

interval = linspace(-800, 1600, 1200);

% Element-wise 2-norm
ewnorm = @(x,y) ( x.^2 + y.^2 ).^(1/2);

% Element-wise cross squared
ewcross2 = @(w,x,y) w^2.*( x.*x + y.*y );

[X Y] = meshgrid(interval, interval);

Z = - G*m1 ./ ewnorm( X-r1(1), Y-r1(2) ) - G*m2 ./ ewnorm( X-r2(1), Y-r2(2) ) - 1/2*ewcross2(w,X,Y);

h = figure;
contour(Z);

daspect([1 1 1]);

saveas(h, 'star1', 'eps');

hold on;

[FX,FY] = gradient(-Z);
quiver(X, Y, FX,FY);

hold off;

问题是网格太密集。 您只需要尽可能少的元素来生成有用的网格。 因此,请尝试降低网格的密度:

interval = -100:2:100

如果你要经常改变极限,你可能想避免使用X:Y:Z公式。 改用linspace函数:

interval = linspace(-100,100,10);

这将确保不管你的限制,你的网格将是10x10 。 在下面的评论中,你提到当你使用一个非常大的网格时箭头出现为点。 这是可以预料的。 箭头反映给定点处的“速度”。 当你的情节放大到非常大的程度时,情节中任何给定点的速度几乎为0,因此非常小的箭头。 查看quiver图文档以及quiver quivergroup属性,以查看更多详细信息。

如果您绝对必须大量查看箭头,则可以尝试将AutoScale属性设置为off ,或者增加AutoScaleFactor

quiver(X, Y, FX, FY, 'AutoScale', 'off');
quiver(X, Y, FX, FY, 'AutoScaleFactor', 10);

您可能还想使用MarkerSizeMaxHeadSize属性。 我真的只是建议查看所有的QuiverGroup属性并尝试一下。


你可以使用一个门槛

interval = -100:100;

[X Y] = meshgrid(interval, interval);

h = figure;
contour(X, Y, Z);

hold on;

[FX,FY] = gradient(-Z);
GM = sqrt(FX.^2 + FY.^2);
threshold = 0.1;
mask = GM > threshold;
quiver(X(mask), Y(mask), FX(mask), FY(mask));

hold off;

这将只显示幅度> 0.1的矢量;

链接地址: http://www.djcxy.com/p/67287.html

上一篇: quiver not drawing arrows just lots of blue, matlab

下一篇: MKAnnotationView Callout Accessory