Matlab绘制双曲线与摆线:隐式方程、参数方程与动画实现

发布时间:2026/9/13 16:51:02
Matlab绘制双曲线与摆线:隐式方程、参数方程与动画实现 简介基于Matlab的双曲线与摆线绘制程序包面向计算机、电子信息工程及数学等专业学生尤其适合课程设计、期末大作业或毕业设计中的绘图需求。压缩包内共2个文件包含1个txt说明文件和1个m脚本文件整体大小仅673B体量轻巧、便于上手。m脚本采用参数化编程思路可自由修改参数以实时观察双曲线、摆线的形态变化代码注释翔实、分段逻辑清晰既便于初学者理解Matlab绘图原理也方便有经验的用户快速调整复用txt说明文件则介绍了Matlab 2014/2019a/2024a等版本的运行兼容性与基础操作提示。双曲线与摆线在数学、物理及工程应用中十分常见Matlab可精准呈现其几何特征辅助分析研究。目前已有80人浏览学习适合需要快速实现曲线可视化或将其作为课程参考案例的读者。1. 双曲线与摆线的Matlab作图从方程到动画一次讲清Matlab画双曲线不难熟悉plot的人几分钟就能出图但把摆线这个滚动圆的轨迹画对、画漂亮很多人第一次都会在参数方程上卡住。这篇博文把两条曲线的绘制逻辑拆开讲双曲线的隐式方程、参数方程两种画法各自的适用条件平摆线的矢量化写法、滚动圆演示动画以及一套可以直接复制的配色和精度参数。适合刚把Matlab装好、正在做数学实验或大学物理作业的读者也适合想快速找回Matlab画图手感的老手。读完你得到的不是两张孤立图片而是从方程到可复用函数文件的一整套画图习惯。2. 用Matlab画双曲线fimplicit与参数方程两条路线2.1 先用fimplicit把标准方程转成图形2.1.1 隐式方程fimplicit的最小可用代码拿到双曲线题目第一步先判断方程形式。标准形式x^2/a^2 - y^2/b^2 1是隐式方程Matlab里最直接的函数是fimplicit它接受符号表达式或函数句柄不需要你手动解出y。来看最小可用代码% plot_hyperbola_implicit.m syms x y real a 3; b 2; eq x^2/a^2 - y^2/b^2 1; fimplicit(eq, [-6 6 -5 5], LineWidth, 1.5, Color, [0.00 0.45 0.74]); grid on; axis equal; xlabel(x); ylabel(y); title([标准双曲线 x^2/, num2str(a^2), - y^2/, num2str(b^2), 1]);这段代码里syms x y real声明了实符号变量避免方程在复数域求解时产生多余分支。fimplicit的第二个参数[-6 6 -5 5]依次是xmin xmax ymin ymax它直接控制绘图窗口。axis equal很关键双曲线两支的对称性依赖横纵坐标等比例不加这一句窗口宽的图形会被拉得像抛物线。fimplicit的默认采样密度由MeshDensity控制默认值是151意味着它在绘图区间内生成151×151的网格来搜索曲线。曲线在靠近渐近线的位置变化很快如果你的双曲线离心率较大比如a1, b5建议把MeshDensity调到300以上否则拐弯处会出现肉眼可见的折线感。fimplicit(eq, [-6 6 -8 8], MeshDensity, 300, LineWidth, 1.5);参数说明MeshDensity的单位是“每方向采样点数”不是总点数所以151对应约两万两千个网格点300对应九万个性能开销不大可以放心调高。2.1.2 参数方程画法把无穷分支限制在指定区间fimplicit的优点是不用解方程缺点是你对两支曲线分开控制的能力弱。做作业、课件时经常需要左右两支不同颜色这时用参数方程更顺手。双曲线的自然参数方程是x a*cosh(t), y b*sinh(t)但注意它只生成右半支左半支要手动取y的相反数% plot_hyperbola_param.m a 3; b 2; t linspace(-2.2, 2.2, 500); x a * cosh(t); y b * sinh(t); figure; plot(x, y, -, LineWidth, 1.5, Color, [0.00 0.45 0.74]); hold on; plot(x, -y, -, LineWidth, 1.5, Color, [0.85 0.33 0.10]); grid on; axis equal; legend({右支, 左支}, Location, northwest);这里t的范围决定双曲线分支延伸的长度。cosh增长极快cosh(2.2)约等于4.57cosh(3)约等于10.07所以t超过2.5之后横坐标会迅速跑到屏幕外。我一般先用linspace(-2, 2, 500)试画再根据图像范围微调。使用linspace而不是-2.2:0.01:2.2是因为前者保证采样点数量精确且端点一定包含曲线在顶点附近更平滑。2.2 渐近线的画法与三个绘图效果细节双曲线配渐近线才完整。渐近线方程是y ±(b/a)x它是一条直线用plot在同样的坐标范围内画即可hold on; x_lim [-6 6]; plot(x_lim, (b/a) * x_lim, --, Color, [0.4 0.4 0.4], LineWidth, 1); plot(x_lim, -(b/a) * x_lim, --, Color, [0.4 0.4 0.4], LineWidth, 1); legend({右支, 左支, 渐近线 y2/3 x, 渐近线 y-2/3 x}, Location, northwest);渐近线只需要两个点就能画x_lim给两端坐标Matlab按两点连线。这里有个容易忽略的细节渐近线是“无限接近但不相交”的极限位置图形窗口放大后你会发现曲线和渐近线之间始终有缝隙这不是bug是数学性质。上课演示时可以在标题里注明“虚线为渐近线实线为双曲线”避免学生误以为它们在某个点相交。绘图方式适用方程形式典型调用注意事项fimplicit隐式 F(x,y)0fimplicit(eq, [x1 x2 y1 y2])调MeshDensity提高拐角精度fplot显式 yf(x) 或参数方程fplot((t)[x(t);y(t)], [t1 t2])自适应采样尖点处自动加密plot 参数向量已知离散点plot(x, y)采样点由你控制最灵活一个常见误区是试图用fplot画y ±sqrt(b^2*(x^2/a^2 - 1))这种显式形式。fplot要求单值函数双曲线一个x对应两个y你必须分开画上支和下支而且定义域外会产生复数警告。相比之下fimplicit和参数方程都没有这个问题所以我的默认选择是作业快速出图用fimplicit做课件精细控制用参数方程加plot。3. 用Matlab绘制摆线参数方程、动画与常见变体3.1 平摆线的矢量表达式与最小绘图代码3.1.1 平摆线的几何来源与代码行对应关系平摆线是一个圆沿直线无滑动滚动时圆周上固定点扫过的轨迹。设圆半径为r滚过的角度为θ轨迹参数方程是x r * (θ - sinθ) y r * (1 - cosθ)这个方程的来源值得说清楚固定点的位移等于圆心的平动位移r*θ加上绕圆心的转动位移-r*sinθy方向同理圆心始终在高度r处转动产生的 y 偏移是-r*cosθ合起来就是r*(1 - cosθ)。写代码时这两个物理分量直接对应表达式的两个减法项理解这一点就不会写错符号。% plot_cycloid.m r 1; theta linspace(0, 4*pi, 800); x r * (theta - sin(theta)); y r * (1 - cos(theta)); figure; plot(x, y, LineWidth, 1.6, Color, [0.85 0.33 0.10]); grid on; axis equal; xlabel(x); ylabel(y); title([平摆线 r , num2str(r)]);theta从0到4π生成两个完整的拱每个拱的宽度是2πr高度是2r。axis equal在这里同样重要摆线的拱形在横纵比例一致时才不会被压扁。plot会按theta的顺序依次连线因为sin、cos都是向量化函数x、y直接得到相同长度的向量不需要写for循环。3.1.2 内摆线与外摆线换一组参数方程即可摆线不止平摆线一种常见的还有内摆线小圆在大圆内滚动和外摆线小圆在大圆外滚动。它们的写法结构相同只是系数符号有差别% plot_hypo_epicycloid.m R 4; % 大圆半径 r 1; % 滚动小圆半径 theta linspace(0, 6*pi, 1000); % 内摆线 xh (R - r) * cos(theta) r * cos((R - r) / r * theta); yh (R - r) * sin(theta) - r * sin((R - r) / r * theta); % 外摆线 xe (R r) * cos(theta) - r * cos((R r) / r * theta); ye (R r) * sin(theta) r * sin((R r) / r * theta); figure; subplot(1, 2, 1); plot(xh, yh, LineWidth, 1.5); axis equal; grid on; title(内摆线 R:r 4:1); subplot(1, 2, 2); plot(xe, ye, LineWidth, 1.5); axis equal; grid on; title(外摆线 R:r 4:1);这里的关键参数是R/r的比值。取整数比时图形闭合花瓣数量有规律内摆线当R/r 4得到四尖瓣星形线外摆线得到四瓣外翻的曲线。如果取无理数比曲线永不闭合视觉上会是一团密集的螺纹。做演示时尽量先用整数比验证正确性再尝试其他比例。theta的终止范围也要参考比值R/r 4时滚动小圆转一圈回到起点theta取0到2π * R/r或6π都能获得完整图形。3.2 用animatedline做滚动圆演示动画静态摆线图不难难的是把圆的滚动过程动态展示出来。这里推荐animatedline逐点追加轨迹而不是反复重绘整条曲线% animate_cycloid.m r 1; theta_all linspace(0, 4*pi, 600); figure; ax gca; axis equal; axis([-0.8 4*pi*r0.8 -0.2 2.2*r]); grid on; h animatedline(ax, Color, [0.85 0.33 0.10], LineWidth, 1.6); point plot(ax, NaN, NaN, k., MarkerSize, 18); center plot(ax, NaN, NaN, b., MarkerSize, 12); for k 1:length(theta_all) th theta_all(k); x_pt r * (th - sin(th)); y_pt r * (1 - cos(th)); cx r * th; % 圆心横坐标圆滚过的弧长 cy r; % 圆心纵坐标固定不变 set(point, XData, x_pt, YData, y_pt); set(center, XData, cx, YData, cy); addpoints(h, x_pt, y_pt); drawnow limitrate; enddrawnow limitrate是动画性能的关键它限制每秒最大刷新帧数避免600次循环时界面卡死。如果使用drawnow不带参数每帧都会强制执行同步刷新动画会变慢且CPU占用高。圆心的横坐标cx r*th对应滚动圆的弧长这正解释了为什么摆线参数方程里会出现θ - sinθ的式子。animatedline的另一个好处是它只追加点不需要在每帧用set(h, XData, new_x_all)更新整个轨迹数组。轨迹越长性能优势越明显。如果你只需要最终静态结果可以去掉循环里的处理逻辑直接保留3.1.1节那三行代码动画只用于课堂上演示运动过程。4. Matlab绘图参数、精度陷阱与脚本包排错4.1 采样点、范围与绘图函数的默认参数对照摆线在θ 2π处有一个尖点这是一个很好用的测试样本点。同一个图形用不同采样点数画出来的差异比想象中大得多场景建议采样点数原因摆线静态出图8001500尖点两侧需要足够密度的点才能呈现尖锐转折摆线动画逐点追加6001000超过1500点动画耗时明显效果提升有限双曲线参数方程400600cosh增长快点再多轨迹也不会有新信息子图对比实验每子图300500小尺寸下过密采样造成视觉噪声采样点从100提升到800摆线尖点从圆形钝角变成真正的尖角继续从800提升到5000肉眼几乎看不出区别但导出PDF或矢量图时文件体积会大幅增加。实践上我用linspace(0, 4*pi, 800)作为默认值只有打印大幅海报时才升到2000。注意fplot的自适应采样在尖点处会自动加密但它加密的依据是数值斜率变化摆线的尖点位置斜率趋近无穷fplot反而可能在尖点附近产生过冲这是参数方程类曲线建议用plot而不是fplot的另一个原因。4.2 解压脚本常见问题编码、路径与版本差异这类绘图题目经常以压缩包形式传出解压后最常遇到三个问题。第一个是脚本里的中文注释乱码。很多.m文件以旧版中文编码保存而新版Matlab默认按UTF-8读取打开后注释全是乱码。先看脚本能否运行能运行就继续用不必强行转码不能运行再处理。第二个问题是路径。双击打开脚本直接运行Matlab提示Unrecognized function or variable多半是当前文件夹不在目标目录。可以用cd切换更稳妥的做法是右键左侧文件列表里的文件夹选择“Add to Path”添加到路径这样脚本依赖的自定义函数也能被找到。如果压缩包里包含.fig文件同样需要先添加到路径再打开。第三个问题涉及版本差异旧版本用ezplot画隐式曲线新版用fimplicit旧版本用subplot排多个坐标区新版优先推荐tiledlayout。如果你运行环境是老版本fimplicit不可用需要降级到ezplot但它对线宽、颜色的控制能力弱很多。反过来新版本运行旧脚本时ezplot仍兼容只是会提示考虑改用fimplicit。此外如果你的Matlab是Linux环境、用脚本批量出图时缺少中文字体title里的中文会显示成方框这种情况把字体设置为系统已有的中文字体名即可可以在绘图前加一条set(0, DefaultAxesFontName, WenQuanYi Zen Hei)或换成你系统里已安装的字体。5. 双曲线与摆线综合成图布局、导出与课堂演示5.1 用tiledlayout统一布局并导出高清图片课程报告经常需要把双曲线与摆线放在同一张图里对照。subplot在旧版和覆盖场景都能用但新版Matlab的tiledlayout更适合控制间距而且可以让两个子图共享一个图例和坐标轴风格。一个常见的综合布局是把双曲线两支放在左边平摆线两拱放在右边共享标题与图例% combined_curves.m figure; t tiledlayout(1, 2, TileSpacing, compact, Padding, compact); title(t, 双曲线与摆线绘图报告); nexttile; a 3; b 2; syms x y real eq x^2/a^2 - y^2/b^2 1; fimplicit(eq, [-6 6 -5 5], MeshDensity, 300, LineWidth, 1.5); axis equal; grid on; title(双曲线 x^2/9 - y^2/4 1); nexttile; r 1; theta linspace(0, 4*pi, 800); x r * (theta - sin(theta)); y r * (1 - cos(theta)); plot(x, y, LineWidth, 1.5, Color, [0.85 0.33 0.10]); axis equal; grid on; title([平摆线 r , num2str(r)]);TileSpacing和Padding都设成compact能压缩子图间的空白让两张图在屏幕和打印页上更大。导出图片时建议用exportgraphics而不是旧的print或saveasexportgraphics(gcf, combined_curves.png, Resolution, 300); exportgraphics(gcf, combined_curves.eps, ContentType, vector);exportgraphics对字体、线宽的还原比saveas好导出EPS时不丢字体排版论文需要矢量图时优先用它。参数Resolution, 300是导出位图时的DPI课件投屏用150就够打印或论文投稿用300。5.2 把动画过程保存为gif或加一个滑块调半径课堂演示场景最好把动画存成 gif 或给一个可调参数的空间。用前面的平摆线动画循环在循环内收集帧并写入 gif 即可filename cycloid_animation.gif; for k 1:length(theta_all) % ... 前面动画循环里的更新代码 ... frame getframe(gcf); im frame2im(frame); [imind, cm] rgb2ind(im, 256); if k 1 imwrite(imind, cm, filename, gif, Loopcount, inf, DelayTime, 0.01); else imwrite(imind, cm, filename, gif, WriteMode, append, DelayTime, 0.01); end endDelayTime控制每帧间隔单位为秒0.01 对应接近100fps的视觉流畅度实际gif播放速度还受播放器限制通常设成0.02更真实。gif格式只有256色动画背景最好保持纯白否则圆形的抗锯齿边缘会出杂色点。最后再加一个交互层把半径r设为滑块的变量可以在uicontrol回调里更新摆线数据。半径变化时摆线拱的高度和宽度同步缩放课上推一下滑块就能直观看到参数对曲线形状的影响。这个演示脚本把本文章景区间的参数方程、animatedline动画、图形布局导出打包成一个班级教学小工具。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询