在曲线上做匀速运动(其实匀速有两种情况,一种是匀速度,一种是匀速率,这里讲的是后者,即按长度等分),就要求得曲线的长度,然后算出等分的位置从而把效果实现出来。

这是动画制作软件的常用功能,所以肯定有成熟的做法,当年的我也坚信自己能解决下来。

计算曲线长度其实跟计算面积是一样的,都是照着分割-近似求和-取极限这样的路线,因此可以用定积分来算。只要把被积函数替换成计算短线段长度的函数即可代入。

把曲线用多条线段来模拟,近似的长度就是这多条线段的长度总和。

以单段线为例,给出两端点的坐标,上图中AB的长度就可以用勾股定理求得:

x1-x0,y1-y0分别代表x方向和y方向的差值,因此一般可以简写为

在微分学中,教材指出,对于y=f(x)这种形式的函数来说,Δy的表达式往往会很复杂。比如前面提到的arcsinx,代入到Δy中就真的很不好化简了。

我们要的是无限分割,所以A和B会无限靠近,而在无限靠近的过程中,AB的连线会趋于切线。

所以一般情况下,我们都采用微分(在一元函数很多东西跟导数等价)来代替Δ,即

然后,上面的这个就是被积函数的表达式了。

我们试着把它弄到椭圆的方程上(此处不考虑矩阵史诗级玩法中的那种斜椭圆什么的,偏移也不管)。

这是一个多值函数,一个x对应多个y,并且带着根号:

这样的式子拿去运算很不方便,因此我们一般都用椭圆的参数方程代替。

这种形式的话,dy就不用y'来化简了,而是直接对t求导。

我们知道,sint和cost的平方和等于1,所以我们可以化走其中一个

这个式子看着很复杂,其实很简单,因为a和b都是常数,常数因子在积分中可以直接提取到积分号以外,因此根号外的系数可以忽略,而cost平方的系数也是一个常数而已,我们用c来表示,这样,积分表达式看着就真的不怎么复杂了。

如果知道椭圆弧的起点和终点对应的t值,那么这段椭圆弧的长度就可以写成以下的定积分:

根据牛顿-莱布尼茨公式,我们只要把被积函数的原函数求出来即可得到结果。但是这个只要并没我想象中容易。

求原函数的常用套路往往是先用换元法去掉积分函数中的根号(除非根号内的内容恰好跟基本积分表中的公式吻合)。

比如积分表达式是sqrt(1-x)dx,那么就设t=sqrt(1-x),根号就没了,但是别忘了dx也是积分表达式的一部分,所以dx中的x也要化走。t=sqrt(1-x)的话,x就等于1-t^2,然后积分表达式就变成了td(1-t^2)=t*(-2t)*dt=-2tdt

如果积分表达式是个二次函数,比如sqrt(1-x^2)dx,还是让t等于根号的全部内容,那x就变成了sqrt(1-t^2),根号就无法去掉了。这时候要改掉换元的方法,让x=cost,那么dx=-sint,然后sqrt(1-x^2)就成了sint了。根号也被去掉了,但是已经感觉到没一次的时候轻松。

而这个地方就更蛋疼了,根号内的地方带了个三角函数,我尝试了很多方法,比如用二倍角公式降次,或者是用正余弦乘积代替平方,等等,都失败了。但我记得椭圆的周长公式是很简单的啊,不可能变成弧就求不出来了吧。

万般无奈之下,我只好求助百度,椭圆弧长,椭圆周长,椭圆弧等分,椭圆的定积分计算等等,终于发现了,原来这玩意儿是真的求不出初等函数。而那个简单的椭圆周长公式L=2πb+4(a-b),其实只是一个近似公式,而非精确式。也就是说,我那段时间的研究都给白干了。然后我也百度了椭圆匀速运动的代码,他们的实现也是近似求和,用的是抛物线法,我给了那个求助的网友,基本够他用了,抛物线法其实很容易让积分结果接近准确值,一个完整的椭圆,拆分成40段可以精确到第5位小数,就算有的区段分割次数偏多,浪费了一点点性能,但是这点损失真的可以忽略了。

在百度的过程中,我学到了一门学科,叫椭圆积分,它的诞生就是为了解决椭圆弧长的计算问题,其可以应用到其它的一些曲线(如三次贝塞尔曲线等)的长度计算中。然而这里面有很多东西我看不懂,涉及到的基础知识太多了,比如复变函数,无穷级数等等。所幸的是我有段时间为了搞懂傅里叶变换而自学了一趟关于级数的东西,因此还能勉强前进着。以后我看看要不要把椭圆积分的东西拿点出来分享给大家,毕竟这块我至今还是半吊子。

这个问题一下让我彻底认识到自己不会的东西真的太多太多了。有句话说得好,“知识是一个圆,圆内是你懂的东西,圆外是你不懂的东西,你懂的越多,就越会发现自己不懂的更多。”自此以后,我真的不敢再说自己微积分厉害了。

回到椭圆弧长的问题上,其实不管是不是椭圆,其积分表达式都带着根号。而带根号的在积分公式表中没几种可用的形式。因此我们需要去掉根号。去掉根号的难度,直接决定了这个函数的积分计算难度。一个看似简单的函数,比如本例的1+(cosx)^2,只要给它加上根号,那我们就直接挂了。所以,不能求出原函数的初等数学函数,远比能求的要多很多很多。至少求弧长的领域是这样。

下篇我要酝酿一下该写什么了。继续讲椭圆积分可能太难,所以我打算换个东西写。具体写什么正在考虑,敬请期待!

让微积分穿梭于工作与学习之间(10):在椭圆弧上做匀速运动,我就无能为力了相关推荐

  1. 让微积分穿梭于工作与学习之间(14):带圆弧多边形的面积计算(下,多值函数的情况)

    这篇我们来研究下如何让多值函数在不拆分的情况下也能进行计算,毕竟曲线情况复杂了之后,拆分不一定是件容易的事情. 在上篇我们对圆方程进行积分的时候,为了去掉其中的根号,我们用了三角换元的方法. 这里我们 ...

  2. 让微积分穿梭于工作与学习之间(13):带圆弧多边形的面积计算(上)

    上篇我用了抛物线作为曲边,那理所当然地我们该用微积分来计算.但是如果换成圆弧,那我们可能还会想着能不能用回初等的方法来求解呢? 答案是可以,但是你会发现这将变得非常麻烦.不过有的人(包括为我)一开始总 ...

  3. 让微积分穿梭于工作与学习之间(12):从直边三角形到曲边三角形的面积计算

    上篇的末尾,我感觉写得难了.然后我想了想,在这篇开始曲边图形的面积计算之前,我拿一些具体的数字来演示上篇的直边三角形计算原理,这样好让大家有个过渡. 我们来看看下图这个三角形,用小学的公式来算非常简单 ...

  4. 让微积分穿梭于工作与学习之间(8):我自认为牛逼的成果之四:直接用定义求反正弦函数的导数

    大部分教材已经明确指出,用定义法计算稍复杂的函数的导数一般都很困难.前面给出的正切函数,由于它有和差展开式,所以虽然展开后繁琐了点,但仍然可以继续化简得到最终结果,而反三角函数则不一样了.arcsin ...

  5. 让微积分穿梭于工作与学习之间(31):无穷-无穷,两根式相减的求解套路

    这篇的内容无异于上学时大家做到吐血的数学习题,此处插播一篇纯习题的文章,仅为后续的一个应用打下基础. 在微积分课程介绍极限的章节中,教材会给出无穷-无穷&两根式相减这一类极限的例子,并给出利用 ...

  6. 让微积分穿梭于工作与学习之间(29):夹逼公式的几种变体

    对CAD圆弧直线不了解的朋友可以先阅读以下博文: https://blog.csdn.net/iloveas2014/article/details/103837857 https://blog.cs ...

  7. 莫等闲 - 什么是工作和学习之间的适当平衡?

    什么是工作和学习之间的适当平衡? 2020年11月16日 作者:Phillip Johnston - 最后更新:2021年6月10日 我们的一个成员问我这个问题. 我已经开始在我的主要工作之外接一些自 ...

  8. 工作和学习矛盾之我见

    LZ最近两天工作有点儿心不在焉,不在状态,对此LZ对老板.经理.老大说声抱歉. 从一踏入社会工作,我就告诫自己一定要认真工作.努力学习,尽最大努力提升自己,尽早实现自己的目标.所以我在经常利用工作以外 ...

  9. 一个测试员的工作与学习

    其实,只是想写写自己的从事测试工作与学习经历,算做回顾吧!我怕时间久了自己做了什么都不知道. 初做测试                                                  ...

最新文章

  1. pythonfor循环遍历list_为什么for循环可以遍历list:Python中迭代器与生成器
  2. Django ORM 级联删除
  3. 在Linux下安装aws命令行操作
  4. while(scanf(%d,n)!=EOF)
  5. pandas实战教学电子书上线啦
  6. Oracle ORA-02069: 此操作的 global_names 参数必须设置为 TRUE
  7. 2019-12-17 drivers/clocksource/arm_arch_timer.c
  8. Linux系统的镜像文件iso下载地址
  9. 十六进制和二进制相互转换(快速转换)
  10. 【信息系统项目管理师】12项目合同管理
  11. android wear自动断开,如果你的手表总是自动断开与手机连接的话,可以看下。
  12. Java复制一个文件到新文件夹中,并对新文件重命名
  13. java aes 256 ctr,AES CTR 256 OpenSSL上的加密操作模式
  14. leafler如何清除地图上的图标点
  15. 如何写出好的Java代码
  16. 嘿嘿,我的读者拿到阿里offer,复盘他的时间轴
  17. JS 对象转换为数组
  18. 以下不属于PHP的魔术方法是,PHP中魔术方法的作用是什么?
  19. matlab判断矩阵是否非负,有关非负矩阵的MATLAB程序优化
  20. 游戏知识学习——【战斗系统】

热门文章

  1. S-c crystal 组合
  2. 大爆发还是大崩盘?亿万富翁Bankman-Fried解读NFT
  3. 林宥嘉发声明讽邓紫棋没智慧 主动提分手
  4. 某叶C语言学习上重大的一步——一元三次方程求解
  5. openresty 缓存后端数据
  6. 计算机总是跳出交互式检测,交互式服务检测,教您如何解决电脑总是弹出交互式服务检测...
  7. php install stompgoogle 搜索,Stomp
  8. Linux常用命令——xhost命令
  9. 浏览器攻击框架BeEF Part 2:初始化控制
  10. python画八卦_12行javascript代码绘制一个八卦图