【Matlab】简易动画,与任意曲线相切的圆的运动轨迹

您所在的位置:网站首页 matlab已知圆心半径圆坐标 【Matlab】简易动画,与任意曲线相切的圆的运动轨迹

【Matlab】简易动画,与任意曲线相切的圆的运动轨迹

2024-06-16 13:03| 来源: 网络整理| 查看: 265

目录

1. 要求

2. 效果图

3. 代码

4. 推广

5. 交流讨论

1. 要求

已知一圆与sinx相切,且在sinx上方,半径为1,当x由0递增到4PI时,求该圆的运动轨迹。(之前帮别人写的,我写好了结果他不要了:)

2. 效果图

3. 代码 clear x1 = 0: 0.1: 4*pi; y1 = sin(x1); x = x1 - cos(x1).*sqrt(1+cos(x1).^2)./(1+cos(x1).^2); y = -1./cos(x1).*(x-x1)+sin(x1); theta= -2*pi: 0.01: 2*pi; for i = 1:length(x1) plot(x1, y1); hold on axis([-1.5 14 -2 4]) daspect([1 1 1]) a = 1*sin(theta)+x(i); b = 1*cos(theta)+y(i); plot(a, b); hold off m(:,i) =getframe; end %movie(m,1)

通过解方程得到圆心(x, y)关于x的表达式,x是一维向量,包含圆心运动轨迹中所有横坐标的值,y是一维向量,包含圆心运动轨迹中所有纵坐标的值。

(a, b)是当前循环圆心的坐标。

4. 推广

设圆与曲线y = f(x)的切点为(x, y),过切点(x, y)作切线 y1 = kx + b , 过圆心(px, py)y1的平行线 y2 = kx + c. 易知 c - b = r \sqrt{k^2+1}

把这个三角形单独拿出来,由 正切值相等 可以得到各段长度的表达式

易得

整理得圆心P的轨迹坐标为

%% 作者微信:qczsbwjzjn clear r = 0.5; % 半径 theta= 0: 0.01: 2*pi; % 弧度 h = 0.05; % 步长 x = 0: h: 4*pi; % 函数定义域 f = sin(0.05*x.*x-1); % 函数值域 k = diff(f)/ h; % 一阶差分求近似一阶导数 x = x(1: end - 1); % 更新定义域 f = f(1: end - 1); % 更新值域 px = x - k*r./sqrt(k.*k+1); % 计算p点横坐标 py = f + r./sqrt(k.*k+1); % 计算p点纵坐标 for i = 1:length(px) plot(x, f); % 画曲线 hold on axis([-1.5 14 -2 4]) % 设置坐标轴可视区间 daspect([1 1 1]) % 固定x,y轴 % 画圆 a = r * sin(theta) + px(i); b = r * cos(theta) + py(i); plot(a, b); hold off m(:,i) =getframe; % 得到当前帧 end

这里的曲线f、定义域x、圆半径r、步长h可以自己设置

至于为什么要更新定义域和值域,欢迎评论留言讨论

5. 交流讨论



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3