让微积分穿梭于工作与学习之间(18):圆弧直线的定比分点(或者等分计算)及其在趋于直线时的极限

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

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

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

在本篇开始之前,先给一个动图,演示圆弧等分点的分布及其趋于直线时的极限。

不难看出,趋于直线,等分点就是沿着直线等间距分布。

圆弧等分,基本上要依赖于弧长或者圆心角,半径等,但是我们发现,一般式的6个值非常复杂。

可以看出,圆心半径也简单不到哪里去。用太随意的点,算起来会很复杂,所以此处我们先用回很标准的位置进行计算。

 

在上图的圆弧中,S为起点,E为终点,圆心为C,于是圆心起点的连线和x轴正半轴的夹角为∠ACS=∠ACO+∠OCS=π/2+α/2。然后现在是顺时针旋转的,也就是负旋转,因此它的角度值为负,即

startAngle=-π/2-α/2

类似地,终点角的角度为

endAngle=-π/2+α/2

现在我们在这段圆弧上取任意一个点P,那么这个点跟圆心的连线和x轴正半轴的夹角ACP就会在startAngle和endAngle之间。而P点则在∠SCE的内部(bulge的绝对值小于1的情况才适用这一说法)。

至于等分,则是把∠SCE等分为n份,然后把每条等分线和圆弧的交点取出来,就得到对应的等分点了。

 

可见,等分点P1,P2,P3分别对应的是的1/4处,2/4处和3/4处。这些分数在线段上的含义就是定比分点的比例λ。

具体到跟x轴正向的夹角,这3个点对应的角度值就是startAngle+α/4,startAngle+2α/4和startAngle+3α/4。

把分数用比例λ代替,即可得到在∠SCE的λ处的角度值为startAngle+λα。

然后我们又知道,在已知某个点所在圆的圆心和半径,以及该点跟x轴正向的夹角的情况下,我们可以用如下式子算出该点的坐标。

然后角度我们刚才算了,它等于startAngle+λα,接着,cx,cy和R在第15篇的时候已经算出,我们把它给搬过来。

现在我们代入一下看看吧!先看下x

这里我们又遇到了跟15篇相类似的问题,就是三角函数和反三角函数共存的化简问题。

前面我们用二倍角公式展开,演算过程直接把arctanb完整写出来,然后此处需要用两角和差来展开。但这里我觉得太长了,所以用带α的表达式来计算。

展开到这一步,我感觉到自己被卡住了。cos(λα)和sin(λα)无法继续展开,在中学数学里面,λ取不同的值可以得到不同的结果。

如λ=1时,有sin(λα)=sinα

λ=2时,有sin(λα)=sin2α=2sinαcosα

λ=3时,有sin(λα)=sin3α=3sinα-4sin³α

λ=1/2时,有sin(λα)=sin0.5α=sqrt(0.5*(1-cosα))

可见,λ不同得到的结果差别很大,并且展开式之间并无任何诸如通项公式这样的简单关系,所以上式中的cos(λα)和sin(λα)就只能展开到这儿,如果把4arctanb代入到α中也无济于事。

既然α不好化开了,那我们把b化成用α表达的形式吧,然后因为当b趋于0时,α趋于0,所以我们接下来可以用研究α趋于0来代替。

根据第15篇的演算过程,有

这样的话,我们把这个式子代入到上面的式子中,b就被完全化走了。

这个式子蛮简单的了,我们对α取一下极限看看。

化到这里,我们看到了基于夹逼定理的正弦极限的影子。嗯我们再变换一下。

还真是这样子。看来圆弧等分或者定比分点的事情,在趋于直线的极限变化中是无法在非数学编程语言中进行化简了。因为上面的极限不能用初等数学的方法算出一个可以直接把b=0或者α=0代入的表达式中,所以定比分点这个方法在我目前的项目代码里还是需要用if来区分。如果大家有更好的方法,欢迎在博客中给我留言。

上面残留的极限值等于1,所以当凸度等于0时,x坐标等于

嗯,真的是个很线性的变换,λ=0时刚好等于起始点-p,λ=1时更好等于终点p,λ=0.5时刚好等于0。

类似地,y我们也能算出一个值来。

然后我们算下y在α趋于0时的极限。除了最后一项,剩下的部分是无穷-无穷,需要通过一些技巧来化简。

 

算到这一步,我们用洛必达法则来继续化简,不懂这个的朋友可以给我留言。

艾玛,竟然是0,我们算错了么?没有!把上面的图搬下来吧。

 

这条弧线当它凸度变成0了,就成了S和E的连线,上面的点的y坐标不正是等于0么?所以我们的推导是正确的!

至此圆弧直线的定比分点及其极限计算完毕,我们可以发现,虽然我们拥有了微积分的知识,但在一些场合,我们仍然无法使用非数学编程语言,全通过初等数学的方法对一些算法进行实现。

但这个没关系,我们至少通过这样的演算找出什么东西是一般的编程语言可以做的,哪些又是无法实现,从而指导我们去往着可优化的方向去进军。能做到这一点,大多数的应用场合,我觉得已经是完全够用了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值