matlab:沿着图形和轴线移动圆圈相等

时间:2016-05-24 12:30:22

标签: matlab animation graph geometry

你好,请原谅我,如果我的英语有点生疏了。我试图创建一个沿参数函数移动的圆(坐标存储在向量中)。我已经写了一个用于绘制圆的函数,我知道你可以在matlab中使用轴相等命令来创建圆形并避免使用椭圆。我的问题是,当我这样做时,图形窗口相对于绘制的图形变得非常宽。任何意见都表示赞赏。

主要代码:

t = linspace(0,3);
x = 30*cos(pi/4)/2*(1-exp(-0.5*t));
y = (30*sin(pi/4)/2 + 9.81/0.5^2)*(1-exp(0.5*t)) - 9.81*t/0.5;

for i = 1:length(t)
   plot(x,y)
   axis equal
   hold on
   cirkel(x(i),y(i),1,1,'r') % argument #3 is the radius #4 is 1 for fill
   hold off                  
   pause(0.01)
end

CIRCLE CODE:

function cirkel(x,y,r,f,c)
angle = linspace(0, 2*pi, 360);
xp = x + r*cos(angle);
yp = y + r*sin(angle);
plot(x,y)
if f == 1 && nargin == 5
   fill(xp,yp,c)
end

2 个答案:

答案 0 :(得分:5)

当你致电(********inst.ptr)(); inst.ptr(); 时,它会使x轴的一个单位与y轴的一个单位大小相同。你看到的是什么,因为你的y值比x值的范围大得多。

解决这个问题的一种方法是查询当前轴的纵横比和x / y限制,如the second part of this answer所示。但是,更简单的方法是使用axis equal来绘制圆圈,而不是使用scatter使用圆形标记,无论轴的纵横比如何,圆形标记都是圆形的。

fill

enter image description here

作为旁注,最好update existing plot objects而不是创建新的。{/ p>

答案 1 :(得分:0)

如果您希望小点显示为圆形,并且您希望拥有合理的域(x轴范围),请尝试以下操作:

function cirkel(x,y,r,f,c)
angle = linspace(0, 2*pi, 360);
xp = x + 0.04*r*cos(angle);  %% adding scale factor of 0.04 to make it appear circular
yp = y + r*sin(angle);
plot(x,y)
if f == 1 && nargin == 5
   fill(xp,yp,c)
end

请注意在xp的计算中添加比例因子。如果您想自动执行此操作,可以向cirkel()添加另一个参数,让我们将其称为s,其中包含比例因子。您可以通过计算范围与域的比率(y范围除以x范围)来计算脚本中的比例因子。