一、摆线

圆摆线,即圆在直线上滚动,圆上的点所经过的轨迹。如下图所示:

其动态形成过程已有很多人进行论述,可自行查找。上图给出的是其参数方程,并还可以根据参数方程绘制动态过程,以角度θ为变量,其半径设为1,转一圈正好2π。从中可以看出的是,圆的特别之处是,半径恒定,而且单位角度滚过的弧长一致,直线轴为圆的切线,切线的垂线过圆心。从而很容易计算出滚动θ角之后的弧长。

观察其参数方程可知,摆线轨迹都是从圆心坐标减下去相应的数值,表明先要得到圆心坐标,而作为圆的滚动,圆心坐标很简单。下面则是其一般表达形式,这样写则是为了下面介绍椭圆时更加方便。

其中L(θ)为圆滚动θ的弧长,R(θ)为滚动θ角的半径。

二、椭圆

椭圆有很多表现形式,如经典的曲线方程,另外还有参数方程,极坐标方程方程等。相较于圆,椭圆需要注意的点尤其多。先还是找到Mathematica中绘制椭圆的函数,其中Circle函数可以绘制给定圆心和长短轴半径,且长短轴垂直于坐标轴的椭圆。这就说明画出的椭圆不会倾斜,就是直的。要解决这个问题就要在添加一个旋转的函数,让椭圆绕圆心旋转一定的角度,就相当于把椭圆心移动一定的距离画个椭圆,再旋转一定的角度。即可满足达到滚动的要求。既然滚动时要确定圆心,先要确定其与坐标轴的交点,既是交点亦是切点,确定其与圆心的关系,再确定圆心与摆线点的关系。切点的横坐标坐标即是弧长L(θ),纵坐标为0。

第一个有意思的地方来了,从椭圆心转动的角度与其椭圆半径长之间的关系,如果按照椭圆的参数方程那就错了。参数方程角度与本身自然角度的变化不是一致的,从图中可以看出。我们要的是自然变化的角度,对应的弧长以及此时的椭圆半径。


选用下面的公式才是表达椭圆由其圆心自然对应其圆周上的弧长的公式。至于计算椭圆弧长有椭圆的曲线积分之类的函数,不过这里我刚开始想选用计算周长的函数,最后一看应该是计算这种线长的函数ArcLength,图方便采用这个函数计算椭圆弧长,相当于取一个椭圆,求出对应不同角度的弧长。

具体的通过交点求圆心,圆心求摆线点的公式我就不给出了,重点不在这里,画幅示意图就能明白了。第二个有意思的地方来了,椭圆滚动的角度是θ,那么椭圆转动的角度是不是θ来着,很可惜并不是,是切线角,这就要用求导得出切线的斜率,总之这里算的让人很难受。这些角度的变化计算是最烦人的,浪费了我好多草稿纸。另外切角也掺和进了圆心坐标。

三、椭圆摆线

按照以上的思路再通过一系列复杂的编程,最终结果如下:

本来一开始采用比较笨的方法,把其滚动分为四个区间,结果出来四五个分段函数,代码太乱了,看一遍脑袋都大了,后面从新再来一遍,果断把切角改成0-2π,然后里面的正弦余弦函数都是周期函数,就不用担心了。总体的思路应该是没有什么问题的,先求交点坐标,再联系出椭圆心的坐标,再得到摆线点坐标。不过最后出来的这幅动图唯一的疑问就是,刚开始滚动的那么一会儿和结束时候的那一会摆线不那么圆润,就像手机的倒角圆角拿起来心里总有点不舒服,但是又转化不成单独关于x,y的曲线方程。

上代码:

h[x_] := Piecewise[{{ArcTan[4 Tan[t]], x <= 0.5 Pi},{ArcTan[4 Tan[t]] + Pi, 0.5 Pi < x <= Pi},{ArcTan[4 Tan[t]] + Pi, Pi < x <= 1.5 Pi},{ArcTan[4 Tan[t]] + 2 Pi, 1.5 Pi < x <= 2 Pi}}];(*转动角度*)
a = Table[Show[{Plot[x^2, {x, 1, 3}, Axes -> True, AxesOrigin -> {0, 0}, AspectRatio -> 1/2, PlotStyle -> {Thick, White}, PlotRange -> {{-3, 12}, {-3, 5}}],ParametricPlot[{ArcLength[Circle[{0, 0}, {1, 2}, {0, t}]] + Cos[0.5 Pi - h[t] + t]*2/Sqrt[3*Sin[t]^2 + 1] - 2*Cos[0.5 Pi - h[t]], Sin[0.5 Pi - h[t] + t]*2/Sqrt[3*Sin[t]^2 + 1] - 2*Sin[0.5 Pi - h[t]]}, {t, 0.0001, t}, PlotStyle -> {Thick, Blue}],Graphics[{Red, Disk[{ArcLength[Circle[{0, 0}, {1, 2}, {0, t}]] + Cos[0.5 Pi - h[t] + t]*2/Sqrt[3*Sin[t]^2 + 1],Sin[0.5 Pi - h[t] + t]*2/Sqrt[3*Sin[t]^2 + 1]}, 0.2]}],ParametricPlot[{ArcLength[Circle[{0, 0}, {1, 2}, {0, t}]] + Cos[0.5 Pi - h[t] + t]*2/Sqrt[3*Sin[t]^2 + 1], Sin[0.5 Pi - h[t] + t]*2/Sqrt[3*Sin[t]^2 + 1]}, {t, 0.0001, t}, PlotStyle -> {Thick, Green}],Graphics[Rotate[{Red, Thick, Circle[{ArcLength[Circle[{0, 0}, {1, 2}, {0, t}]] + Cos[0.5 Pi - h[t] + t]*2/Sqrt[3*Sin[t]^2 + 1],Sin[0.5 Pi - h[t] + t]*2/Sqrt[3*Sin[t]^2 + 1]},{1, 2}], AxesStyle -> {Thick, Black, Black}},-h[t]]]}], {t, 0.001, 2 Pi, 0.04 Pi}]
Export["e:/Program Files/math files/椭圆滚动69.gif", a, ImageResolution -> 100];

Mathematica绘制动态椭圆摆线(一)相关推荐

  1. Mathematica绘制动态蔓叶线

    一.什么是蔓叶线 可以去参考百度百科 二.为什么要绘制蔓叶线? 那肯定是好玩啊 三.怎么绘制动态蔓叶线 我主要从我绘制的过程来进行说明.从百度可知蔓叶线的图像以及其曲线方程. 所以问题来了,蔓叶线的动 ...

  2. MATLAB绘制主函数动态图,matlab绘制动态图

    mathematica绘制动态图,"绘图之王"争霸赛--Excel才是绘图王道,matlab绘制动态图,动态三维图绘制 matlab动态图画法_数学_自然科学_专业资料.Matla ...

  3. Mathematica绘制椭圆摆线簇(二)

    一.椭圆积分 椭圆积分是一类积分的统称,这里只讲用来计算椭圆周长的积分.这种积分不能采用基本函数表达,只能用积分形式表达.要采用积分计算出椭圆的周长,得用曲线积分.L为椭圆周长,计算90度的长度再乘4 ...

  4. java如何实现多个小球碰撞后反弹以及绘制动态图。

    本次小实验,通过三个类的编写来实现. 首先创建一个点类,其中包含对点的构造方法和多个需要点的构造方法. /*** 点类,表示平面中的点或始点为原点的向量* @author xxx**/ public ...

  5. 超详细的Python matplotlib 绘制动态图

    复习回顾 在matplotlib模块中我们前面学习绘制如折线.柱状.散点.直方图等静态图形.我们都知道在matplotlib模块主要有三层脚本层为用户提供快捷的绘制图形方法,美工层接收到脚本层的命令后 ...

  6. C# 在PDF中绘制动态图章

    我们知道,动态图章,因图章中的时间.日期可以动态的生成,因而具有较强的时效性.在本篇文章中将介绍通过C#编程在PDF中绘制动态图章的方法,该方法可自动获取当前系统登录用户名.日期及时间信息并生成图章. ...

  7. python画动图-Python绘制动态水球图过程详解

    先来看看绘制的动态水球图: 没有安装PyEcharts的,先安装PyEcharts: # 安装pyecharts模块,直接安装就是最新的版本pip install pyecharts 安装好PyEch ...

  8. python绘制动态图-Python利用Echarts绘制动态交互图:快速入门

    我们都知道,Echarts是百度开源的超强大的数据可视化工具.Python中经典的matplotlib.seaborn等库相比,它最大的优点是所绘制的图形为动态图,这意味着我们可以和图形之间进行动态的 ...

  9. python画曲线-python绘制动态曲线教程

    从txt种获取数据 并且通过动态曲线显示 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation ...

  10. 【Matlab 控制】模仿绘制动态图像 保存动态图 GIF

    模仿绘制动态图像 模仿绘制动态图像 保存为动态图 GIF 视频转 GIF 模仿绘制动态图像 clc;clear a=[1 2 3 4 5 6 7 8 9 ]; b=[2 4 8 16 30 40 50 ...

最新文章

  1. 修改点击cell时显示的颜色
  2. (转)Javascript标准DOM Range操作(1)
  3. python queue_Python-Queue 入门
  4. Windows anaconda python3 import ssl报错的解决方案
  5. Day02-深度学习原理与使用方法
  6. LeetCode——DFS
  7. 通过VsPhere体验MAC OS X
  8. vb冒泡排序法流程图_VB算法-冒泡排序教案
  9. 1D/1D动态规划的三种优化方法
  10. 2020年中国新世代用户视频消费行为洞察
  11. jQuery: 插件开发模式详解 $.extend(), $.fn, $.widget()
  12. java 是怎么跨平台运行的
  13. c语言程序设计报告链表,c语言程序设计报告链表实现学生信息管理.docx
  14. C++高级教程之多线程
  15. vmware下安装mac os虚拟机问题,最后还是最终攻克了被一个小失误给陷害了
  16. 使用python解决算法和数据结构--使用栈实现进制转换
  17. python笔记整理
  18. kettle连接oracle汉字乱码
  19. 安卓WebView 屏蔽所有类型JS弹窗
  20. CSP 2018-9-4 再卖菜 搜索 + 剪枝

热门文章

  1. Linux下Esp32micropython开发工具thonny的安装
  2. 网络时钟同步系统概述
  3. Extra Credits: Where Did Survival Horror Go? 额外加分: 恐怖求生游戏去哪了?
  4. C++ 小游戏 视频及资料集(十)
  5. PAT 1072 开学寄语
  6. 关于环信客服的集成与使用
  7. 进击的人工智能:从产品角度,深度解析「对话机器人」
  8. VMware centOS7下 mkdir文件时出现 Permission denied 权限问题
  9. 可能是最漂亮的Spring事务管理详解
  10. 信号与系统 频域分析