过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,群号:927550334
前段时间过冷水遇到了这么一个有趣的运动图像问题:小圆在正旋轨迹上上做运动,请问圆上的一点的运动轨迹图像该如何有Matlab求出来?
刚开始过冷水以外是一个很简单的问题,想着沿着正旋曲线上的点绘制绘制圆不就可以了?于是得到的是以下图像
clear x=linspace(0,5*2*pi,200); y=sin(x); figure1 = figure; axes1 = axes('Parent',figure1,'Position',[0.13 0.11 0.775 0.184633077765608]); hold(axes1,'on'); for i=1:length(x) plot(x,y,'Parent',axes1,'LineWidth',3) hold(axes1,'on'); axis off rectangle('Position', [x(i)-1, y(i)-1, 1, 1], 'Curvature', [1 1]); xlim(axes1,[0 30]); ylim(axes1,[-4 4]); box(axes1,'on'); set(axes1,'LineWidth',3); hold(axes1,'off'); getframe;% end
绘制出来后做比较才发现错的很离谱,究竟是错在什么地方了呢?小圆在正旋上始终是正切的,而我绘制出来的就是根据正旋上的点绘制一个园没有正交性可言,所以过冷水就在想该如何实现正切?假设正弦上任意一点为(x0,y0),正切圆满足两个条件1;圆心到正弦交点对应的函数和正弦函数正交;2 圆心到正旋交点的距离等于半径1;因此可以列方程:
解方程求圆心然后画圆。
clear x=linspace(0,5*2*pi,200); y=sin(x); y3=-1./cos(x); figure1 = figure; axes1 = axes('Parent',figure1,'Position',[0.13 0.11 0.775 0.184633077765608]); hold(axes1,'on'); gg=1; for i=1:length(x) plot(x,y,'Parent',axes1,'LineWidth',3) hold(axes1,'on'); axis off syms n m s=solve((m-y(i))./(n-x(i))==(y3(i)), (n-x(i)).^2 (m-y(i)).^2==1^2,n,m); center=[double(s.n),double(s.m)] plot(center(2,1),center(2,2),'MarkerFaceColor',[0 1 0],'MarkerEdgeColor',[0 1 0],'MarkerSize',20,'Marker','.','LineStyle','none') plot(sin(-pi:0.1:pi) center(2,1),cos(-pi:0.1:pi) center(2,2)); xlim(axes1,[0 30]); ylim(axes1,[-4 4]); box(axes1,'on'); set(axes1,'LineWidth',3); hold(axes1,'off'); getframe; end
我们得到了看上去比较正常的的圆在正旋曲线上的运动案例,可是关于某一点的运动轨迹并没有绘制出来,应该如何实现?首先原上的点应该是是有圆心加角度确定的:
好了,根据该方程给出了点的轨迹图,然后在动态绘图上做一点小技巧就可以实现我们想要的效果。
由于之前过冷水一直有的大家绘制动态图像的技巧,关于图像化的具体实现只是一个灵活应用的问题,过冷水就不再反复讲,感兴趣的可以自行看程序代码本期过冷水要和大家分享的知识点就上述这么多,有感兴趣的问题欢迎留言讨论。
过冷水发表于 仿真秀 平台原创文章,未经授权禁止私自转载,如需转载请需要和作者沟通表明授权声明,未授权文章皆视为侵权行为,必将追责。如果您希望加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载均可加群:927550334。
精品回顾
过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享