对CAD圆弧直线不了解的朋友可以先阅读以下博文:

https://blog.csdn.net/iloveas2014/article/details/103837857

https://blog.csdn.net/iloveas2014/article/details/103848611

前面的两个公式(弧长,定比分点)在推导的过程中,为了适应夹逼公式,我们做了一些比较刻意的变换,这些变换有时候是不积极的,因为它们可能会带来更多的性能损耗或者精度损失。

比如

又如反三角函数的

这些变换虽然是预先手算完成,但是写到代码上可能还不如分开条件判断。

如果不是刻意追求只能有一条夹逼公式的话,那么我们完全可以多定义几种夹逼公式以便在不用的地方使用。

这里我给出6个夹逼公式,其中第一个不是变体。

function 正弦夹逼公式(x){return x != 0 ? Math.sin(x) / x : 1;
}function 正切夹逼公式(x){return x != 0 ? Math.tan(x) / x : 1;
}function 反正弦夹逼公式(x){return x != 0 ? Math.asin(x) / x : 1;
}function 反正切夹逼公式(x){return x != 0 ? Math.atan(x) / x : 1;
}function 双正弦夹逼公式(k1, k2, x){return x != 0 ? Math.sin(k1 * x) / Math.sin(k2 * x) : (k1 / k2);
}function 双正切夹逼公式(k1, k2, x){return x != 0 ? Math.tan(k1 * x) / Math.tan(k2 * x) : (k1 / k2);
}

有了这些变体,我们的一些公式写起来会更加方便。比如弧长公式,现在的是

CircleArcStraightLine.prototype.arcLength = function(){//s为起点,e为终点,b为凸度var straightLength = Math.sqrt((this.e.x - this.s.x) * (this.e.x - this.s.x) + (this.e.y - this.s.y) * (this.e.y - this.s.y));    var u = Math.atan(b);return straightLength / 夹逼公式(u) * Math.sqrt(1 + this.b * this.b);
}

改用变体后,就变成

CircleArcStraightLine.prototype.arcLength = function(){//s为起点,e为终点,b为凸度var straightLength = Math.sqrt((this.e.x - this.s.x) * (this.e.x - this.s.x) + (this.e.y - this.s.y) * (this.e.y - this.s.y));    return straightLength / 正切夹逼公式(b) * (1 + this.b * this.b);
}

定比分点能简单更多,读者可以自行尝试。

下一篇我打算把投影面积也用夹逼公式算出来,敬请期待!

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

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

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

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

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

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

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

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

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

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

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

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

    在曲线上做匀速运动(其实匀速有两种情况,一种是匀速度,一种是匀速率,这里讲的是后者,即按长度等分),就要求得曲线的长度,然后算出等分的位置从而把效果实现出来. 这是动画制作软件的常用功能,所以肯定有成 ...

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

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

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

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

  9. python按照模板复制sheet页,python实现跨excel的工作表sheet之间的复制方法

    如何将某个Excel文件中的特定sheet复制到一个另一如何将某个Excel文件中的特定sheet复制到一个另一个Excel文件中去?小编给你倒一杯热水.可你惦记着其他饮料,所以你将它放置一旁.等你想 ...

最新文章

  1. C++_volatile限定修饰符 Pair类型
  2. MPB:农科院牧医所赵圣国组-微生物超高分子量DNA提取方法
  3. python使用fpdf2包和pdfrw报包新内容添加到已有的PDF页面上
  4. innodb主键的长度为什么不能大于767字节
  5. 恢复linux里被误删除的文件
  6. 机器学习笔记:误差的来源(bias variance)
  7. for-each 循环原理
  8. IoTSharp部署教程-Sqlite分表篇
  9. MTK通用驱动的安装
  10. 快速排序C语言递归代码实现
  11. java库存_java实现超市库存管理系统
  12. nginx处理redirect location端口丢失的问题
  13. 台式计算机无法连接网络,台式电脑无法连接无线网络怎么办
  14. 第三方服务(文件,图片存储)
  15. adb性能测试_FPS(流畅度)
  16. 用Python批量裁剪图片
  17. 思科网络学院-网络互联-第五章
  18. IntelliJ IDEA 缓存和索引介绍和清理方法
  19. 一个日本小老板某个工作日的时间纪实
  20. linux服务器80端口无法访问,Telnet linux服务器80端口时通时不通

热门文章

  1. getsockopt
  2. 三万字 | Kafka 知识体系保姆级教程宝典
  3. PCB射频电路四大基础特性
  4. 北京大学郭炜慕课习题解
  5. 线路负载及故障检测装置《我搜集的资料》
  6. (附源码)springboot汽车配件销售管理系统 毕业设计131650
  7. vue项目引入不符合ES6模块化标准的JS文件
  8. 汇编SHR、SHL、SAR、SAL、ROL、ROR、RCL、RCR指令
  9. dgi数据治理_银行数据治理方法浅析
  10. 每日简报 5月11日简报新鲜事 每天一分钟 了解新鲜事