【问题标题】:Creating a point moving along a circle in MATLAB with speed and radius defined by the user在 MATLAB 中创建一个沿圆移动的点,其速度和半径由用户定义
【发布时间】:2016-08-29 19:20:12
【问题描述】:

我希望在 MATLAB 中创建一个简单的圆图,其中模型显示沿圆移动的点,其半径和角速度由用户定义。

以弧度/秒为单位的角速度

我在 MATLAB 编码方面相对较新,所以任何帮助都会非常有用!

我试过这段代码:

r=1;
t = 0:.01:2*pi;
x = r*cos(t);
y = r*sin(t);
comet(x,y);

但是当我更改 0.01 值时,该点并没有移动得更快,它只是跳过了更多的曲线,我也不确定增量是否以弧度为单位。

感谢您的宝贵时间

【问题讨论】:

  • 移动得更快 = 当您只是调整步长时跳过更多的曲线。
  • 是的,这就是问题

标签: matlab plot graph curve scilab


【解决方案1】:

编辑版本:查看以前版本的编辑历史记录。

Radius = 10;
AngularVelocity = 5; % in deg / s
AngleStep = 0.1
Angles = AngleStep : AngleStep : 2*pi;
CircleX = [Radius]; % empty array
CircleY = [0]; % empty array

%Initial zero-angle plot whose data we'll keep updating in the for loop:
a = plot([CircleX,CircleX], [CircleY,CircleY], 'r:');
hold on;
b = plot(CircleX, CircleY, 'o', 'markeredgecolor', 'k', 'markerfacecolor','g');
axis([-Radius, +Radius, -Radius, +Radius]); % make sure the axis is fixed
axis equal; % make x and y pixels of equal size so it "looks" a circle!
hold off;

for t = Angles
  CircleX(end+1) = Radius * cos (t); % append point at end of CircleX array
  CircleY(end+1) = Radius * sin (t); % append point at end of Circley array
  set(a,'xdata',CircleX,'ydata',CircleY); % update plot 'a' data
  set(b,'xdata', CircleX(end), 'ydata', CircleY(end)); % update plot 'b' data
  drawnow; % ensure intermediate frames are shown!
  pause(AngleStep/AngularVelocity) % pause the right amount of time!
end

与之前的版本相比,这次修改做了两处改动:

  1. 现在我们正在更新现有绘图的数据,而不是重绘。这通常更快,因为 matlab 不必重绘 axes 对象(即保存绘图的容器)
  2. 我将 AngleStep 从 0.01 增加到 0.1。这意味着要绘制的角度减少了 10 倍,因此您可以负担得起 10 倍的速度绘制,因此 matlab 不太可能因为开销而无法绘制。话虽如此,这是以不那么完美的圈子为代价的。试试 AngleStep=1 看看我的意思。

【讨论】:

  • 您好,非常感谢您的帮助,只有一件事,我似乎无法更改速度,如果我输入 1 或 100,差异几乎无法察觉
  • @RicardoSilvestre 我不想进阶,因为你说你是初学者。是的,你是对的,原因是 重绘 整个情节需要时间,matlab 不够快,所以这会“占用”时间。如果你放慢速度,你会发现它确实变慢了。有种方法可以加快速度,方法是直接更新绘图数据而不是重绘,但这稍微复杂一些。你还想让我给你看吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多