作者:越秀地产星汇凤凰近_681 | 来源:互联网 | 2023-05-27 14:42
最近翻看我以前的博文,看到计算LWPLINE中凸度圆弧的圆心的公式那篇,一时竟想不起这公式是如何推导的了。
(http://blog.sina.com.cn/s/blog_66349acf0102vivw.html)
这里把推导过程简单描述一下,为了以后不再忘记。
注:本来想发在新浪博客上,奈何人家在维护,要5月才能恢复,已经写好的文,怕丢失,就发到了这里。
首先要明确lwpline中圆弧的定义,在Autodesk的文档中能见到两种叙述:
1,凸度是圆弧圆心角的四分之一的正切
2,凸度等于圆弧的弓高和圆弧的前进距离的比,即凸度=2H/L,H为弓高,L为前进的长度,也即弦长。
这2种叙述表达的含义是一致的,只是第一种方便计算,第二种更直观。

从图上可知,此段圆弧的凸度 bulge=2H/L=tan(β)=tan(α/2)
这里α=2β,应该可以证明的。
(补充一下这个证明,见下图,从图上可看出,90 = α/2 + γ = β + γ,即 β = α/2)

可以想象,以AB的中点C为圆心,以红线段的长度为半径(记为r),以CB为起始位置逆时针旋转90度就能得到O点。
记AB的倾角为θ,则


那么O点的坐标为:

.................................. (1)
我们知道 α=2β, 所以:


记:

那么:

把C点坐标( (x1+x2)/2, (y1+y2)/2), r,以及sin(θ), cos(θ) 带入公式(1),得到O点的坐标为:


化简后得:


其中:

以上公式是以逆时针劣弧推导的结果,那么对于逆时针优弧以及顺时针优劣弧是否也适用呢?
答案是:适用!不用做任何更改。
秘密就在于参数b具有自动调节功能。
下面简单分析一下。

上面是逆时针优弧,此时的凸度bulge>1,那么b<0,所以 r<0
X = Xc + r*cos(π/2+θ) = Xc + (-|r|)cos(π/2+θ) = Xc + |r|sin(θ) = Xc + |r|cos(π/2-θ) = Xc + |r|cos(θ-π/2)
Y = Yc + r*sin(π/2+θ)= Yc + (-|r|sin(π/2+θ) = Yc + |r|(-sin(π/2-θ)) = Yc + |r|sin(θ-π/2)
即:逆时针旋转一个负的向量,相当于顺时针旋转其反向量(正向量)。
从图上可以直观的看到,实际是顺时针旋转到达的圆心位置。

这是一个顺时针的劣弧,凸度bulge <0, |bulge| <1, 可以得到 b <0, r <0
与上面一样的道理,也是顺时针旋转到达圆心位置。

这是一个顺时针的优弧,bulge<0且 |bulge|>1, 那么 b>0, r>0
对于r>0的情况,仍然是逆时针旋转。
====================================
所以,正是由于bulge可正可负,参数b才天生具有调节旋转方向的功能。
因此,无需讨论bulge是否正负,统统使用一组公式即可计算出圆心。
最后感慨一句:
Autodesk用凸度的正负表示圆弧的方向,真乃神来之笔。