如何用matlab画一个圆沿着某条直线运动

如何用matlab画一个圆沿着某条直线运动,第1张

x

=

0:0.01:5

%

函数变量取值范围

y

=

x

%

函数

plot(x,y)

axis

equal

hold

on

rho

=

0.1

%

圆的半径

rho

=

rho*ones(1,100)

theta

=

linspace(-pi,pi,100)

[xx,yy]

=

pol2cart(theta,rho)

h

=

plot(xx,yy,'r')

for

ii

=

0:0.01:5

data

=

ii

set(h,'Xdata',xx+ii,'Ydata',data+yy)

pause(0.01)

%

调整速度

end

如果你的直线x,y的比例相差较大,那么axis

equal应该删掉,用椭圆代替圆(画出来仍然是圆),椭圆的长轴和短轴的比例可以查看坐标系的DataAspectRatio属性。

还有一个取巧的方法,我刚回答完另一个人,你可以参考一下

x

=

0:0.01:5

%

函数变量取值范围

y

=

sin(x)

%

函数

plot(x,y)

hold

on

h

=

plot(0,sin(0),'or',

'MarkerSize',

6)%

调节markersize后的数值调节圆的大小

for

ii

=

0:0.01:5

data

=

sin(ii)

set(h,'Xdata',ii,'Ydata',data)

pause(0.01)

%

调整速度

end

从图形来看,一共n个同心圆,外面大圆n等分,然后从每个等分点作所有同心圆的两条切线

如果用极坐标表示,可以很容易求解切点,直接上画图的代码

n = 10 %同心圆数量

m = 40 % 等分点数

R = 1 % 外圆半径

s = 0:0.01*pi:2*pi % 控制圆的光滑程度的极坐标角度

t = 0:2*pi/m:2*pi % 等分点极坐标角度

x0 = R*cos(t)y0 = R*sin(t) % 等分点直角坐标

color=['r','g','c','k','m','y'] % 画图颜色

lc = length(color) % 颜色数组长度,超出后从头开始

for i = 1:n % 开始同心圆循环

  r = R/n*i % 当前同心圆半径

  a = acos(r/R) % 切线与圆心线角度(弧度制)

  x1 = r*cos(t-a)y1 = r*sin(t-a) % 任意等分点相对当前同心圆的第一个切点坐标

  x2 = r*cos(t+a)y2 = r*sin(t+a) % 任意等分点相对当前同心圆的第二个切点坐标

  plot(r*cos(s),r*sin(s),color(mod(i,lc)+1))hold on % 画同心圆

  for j = 1:m % 对每一个等分点循环

    plot([x0(j),x1(j)],[y0(j),y1(j)],color(mod(i,lc)+1))hold on % 第一条切线

    plot([x0(j),x2(j)],[y0(j),y2(j)],color(mod(i,lc)+1))hold on % 第二条切线

  end

end

axis equal  % 横纵坐标轴比例一致

% 半径为10的圆

t = linspace(0,2*pi,100)

x = 10 * cos(t)

y = zeros( size(x) )

z = 10 * sin(t)

plot3(x, y, z)

% 10个半径为1的小球

hold on

for t = 0 : 2*pi/10 : 2*pi*9/10

x0 = 10 * cos(t)

z0 = 10 * sin(t)

[X,Y,Z] = sphere

x = X + x0

z = Z + z0

surf(x,Y,z)

end

axis equal

view(0,0)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12193978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存