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

对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);
}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值