EDA365电子论坛网

标题: 弧線長度計算問題 [打印本页]

作者: ginooolu    时间: 2013-5-16 00:04
标题: 弧線長度計算問題
本帖最后由 ginooolu 于 2013-5-16 00:11 编辑

想請問各位先進如何計算弧線長度?
以下是在cadence看到的範例,但最近發現它似乎不能判斷弧線是否大於180度,因此超過180度時會計算錯誤。
這個公式我看不懂,是實測時發現的。想請問如何修改或用其他方法來計算弧線的長度?
節錄自http://www.cadence.com/tw/Resources/list1esc_length-1.pdf
;if radius is not nil, then it's an arc and need to calculate
           ;the length for the arc.
                  if(rad!=nil then
                     rad_sq=rad*rad
                     len_sq=len*len
                     cos_theta=(2*rad_sq-len_sq)/(2*rad_sq)
                     theta=acos(cos_theta)
                     len=theta*rad
                  );endif(rad!=nil  
作者: ginooolu    时间: 2013-5-17 12:33
自己update一下
目前構思是取得start-end座標,中心座標,順時針或逆時針繞線後做判斷,應可判斷為>180或<180度。
然後再用圓周減去原弧線長
但具體判斷公式還在構思,似乎會有多種狀況,望先進提供意見
作者: deargds    时间: 2013-5-17 17:35
ginooolu 发表于 2013-5-17 12:33
自己update一下
目前構思是取得start-end座標,中心座標,順時針或逆時針繞線後做判斷,應可判斷為>180或

在allegro16.x中可以直接使用AXL函数axlDBGetLength来进行计算,另外使用数学方式计算可以参考下面的思路:
1.建以圆弧中心为原点的极坐标系
2.利用反正切分别计算出起点与终点的弧度
,另外需要考虑一下起点与终点弧度> PI 时的取值.
3.根据圆弧顺逆条件计算弧度差,然后计算  圆弧长=弧度差*半径。
作者: ginooolu    时间: 2013-5-19 21:33
謝謝版主提供的資料,AxlDBGetLength函數可以直接解決在16.x的問題。
但用數學計算的方法在下還是看不太懂,可否舉一例供參考?

作者: deargds    时间: 2013-5-20 10:10
本帖最后由 deargds 于 2013-5-20 10:28 编辑
ginooolu 发表于 2013-5-19 21:33
謝謝版主提供的資料,AxlDBGetLength函數可以直接解決在16.x的問題。
但用數學計算的方法在下還是看不太懂 ...

你原来发的是利用余弦公式来计算夹角,先把这个看明白




;if radius is not nil, then it's an arc and need to calculate
           ;the length for the arc.
                  if(rad!=nil then
                     rad_sq=rad*rad
                     len_sq=len*len
                     cos_theta=(2*rad_sq-len_sq)/(2*rad_sq)
                     theta=acos(cos_theta)
                     len=theta*rad
                  );endif(rad!=nil  
作者: ginooolu    时间: 2013-5-22 17:38
本帖最后由 ginooolu 于 2013-5-22 17:41 编辑

謝謝版主,上面的公式看懂了;因為圓形內的三角形是等腰三角形,所以b=c,以上程式就是帶入餘弦公式。
但對如何判斷大於180度還是不了解。我陷入的思考方向是
以三點座標計算只能仿照一個三角型計算,所以算出來的弧線長一定小於180度
要判斷大於180度,必須配合startEnd座標,圓心座標再加上順逆時針,才能判斷
但startEnd與圓心具備怎麼樣的關係才能判斷>180度,似乎有許多種狀況,必須針對不同的狀況個別判斷。
目前對這樣的關係不知如何判斷,還是我的思考方向錯了?

以下是同樣的座標,因為startEnd與順逆時針的不同,就會有四種狀況的想法

Arc.png (12.16 KB, 下载次数: 3)

Arc.png

作者: deargds    时间: 2013-5-22 20:47
ginooolu 发表于 2013-5-22 17:38
謝謝版主,上面的公式看懂了;因為圓形內的三角形是等腰三角形,所以b=c,以上程式就是帶入餘弦公式。
但對 ...

1.建议以圆弧中心为原点的极坐标系。
2.求等腰三角形两条边在极坐标中的弧度(取值范围为0-2PI),三角函数只能取和0-PI范围,需要根据直角坐标系中顶点X Y的正负值判断三四象限的情况,来由此获取实际弧度(例如:是否需要+PI),另外需要考虑点落在极轴上的情况。
3.得到两个弧度之后,再根据顺逆条件来进行减法运算获取夹角弧度,需要要考虑几种状况,例如:起点弧度如果小于终点弧度需要+2PI后再进行计算
4.得到弧度角后,弧长=弧度*圆周。
作者: ginooolu    时间: 2013-5-22 23:00
我明白了,謝謝版主不厭其煩的說明




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2