你好,请原谅我,如果我的英语有点生疏了。我试图创建一个沿参数函数移动的圆(坐标存储在向量中)。我已经写了一个用于绘制圆的函数,我知道你可以在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
答案 0 :(得分:5)
当你致电(********inst.ptr)();
inst.ptr();
时,它会使x轴的一个单位与y轴的一个单位大小相同。你看到的是什么,因为你的y值比x值的范围大得多。
解决这个问题的一种方法是查询当前轴的纵横比和x / y限制,如the second part of this answer所示。但是,更简单的方法是使用axis equal
来绘制圆圈,而不是使用scatter
使用圆形标记,无论轴的纵横比如何,圆形标记都是圆形的。
fill
作为旁注,最好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范围)来计算脚本中的比例因子。