高速公路座標高程計算程式開發之後記

2021-09-07 08:19:49 字數 4237 閱讀 9386

----雙心軟體·**飛揚

2023年畢業於中國地質大學,進入了施工單位中鐵四局集團第一工程****,剛進單位做技術員,首先接觸到的就是日本人的可程式設計計算器casio fx-4800p,跟著技術主管學習了它的使用,慢慢琢磨研究編寫簡單的線元法座標計算程式。為了怕曲線引數出錯,我用fortran77語言編寫了程式進行複核,程式和計算器計算的能夠吻合。

2023年的時候,在亳阜高速公路12標修建劉小集互通立交,這個互通區有亳阜高速、界阜蚌高速兩條主線,abcdefgh8個匝道,共10條線路,是安徽省較大的互通區,有不完全緩和曲線等各種種類。主線橋k99+983特大橋全長約1公里,有39個墩台,有預製空心板、箱梁、現澆段多種結構,墩台平行布置、徑向布置均有,橋面寬度有寬度漸變段,有超高,結構複雜,主線匝道豎曲線有超高,計算容易出錯,必須要有個功能較強的座標高程計算程式來適應這種複雜情況。採用原有的分段計算平曲線方法,緩1,圓,緩2單獨分段,特別是不完全緩和曲線處理,傳統的從zh或hz點計算迴旋線那種教科書式的方法捉襟見肘,卡西歐4800p計算器容量只有4500位元組,當時還沒有4850p這種計算器(記憶體28500位元組),雖然採用去掉座標xy中相同位數的高位位元組節約了部分空間,但編得下座標就編不下高程,而且要考慮超高,座標高程放在兩個計算器裡面很不方便。這種情況迫使我想辦法解決,我查閱了大量相關資料,在聶讓主編的《全站儀與高等級公路測量》道路立交匝道的測設相關章節中,終於找到了利用微積分和泰勒展開式,結合切線支距法和解析幾何中的座標旋轉,從緩和曲線上任意一點計算緩和曲線任意一點座標的方法,從zh或hz點計算座標的方法只是這種方法的乙個特例,採用這種方法,我把緩1+圓+緩2作為乙個整體單獨分段,把hy點作為起算點,這樣,採用線元法計算,整條緩和曲線不用再重複輸入zh或hz點的起點里程j、起點座標方位角cdf,圓曲線半徑r,迴旋引數a了,每個變數比如里程j=99983.250加上冒號,需要占用12位元組,共有14段緩1+圓+緩2這種型別,12*6*2*14=2016位元組,減少的位元組接近4580p計算器容量的一半,由於hy點的相對固定性,其方位角既可以用程式計算,也可以簡單地手算,因而無論完全不完全,對稱非對稱緩和曲線都可以計算,這樣修改之後,為高程計算騰出了許多空間,能夠編寫部分大部分標高及超高計算。為了節省空間,用完了a~z的26個字母,每個變數代表乙個引數,盡量不重複,這樣執行起來子程式單獨執行的時候輸入的資料不會更改。同時我加上了泰勒展開式中的xy的9、13、11、15等高次方項,保證了匝道計算的精確性,很快淘汰了以前的那種從zh或hz點計算緩和曲線的方法。

後來程式在不斷完善,陸陸續續地增加一些新的功能,這些功能是我之前沒有想到的。這中間遇到了程式上的一些問題,不得不提的乙個人就是vb老哥/delphi老哥,學習計算機語言的都看過清華大學譚浩強教授的教材,他是譚浩強的學生,vb和delphi程式設計功底非常深厚,我得到了他的一些幫助。2023年,增加了交點法計算的功能,因為卡西歐計算器多半都是用線元法計算,受到這個思想的束縛,我先實現的是線元法的演算法,後來增加了交點法計算,也就是特徵點計算,這個功能是後來增加的,所以放在後面也沒有調整。增加了計算任意交角的中邊樁高程計算。2023年增加了批量計算橋梁涵洞通道座標高程功能,增加了cad在z=0模式下里程標註的功能,增加了設定excel邊框、字型、頁面設定等功能,這些功能的加入,雖然讓列印效果更美觀,但由於vba**的低效性,輸出時間延長了若干秒,沒辦法,這就是俗稱「傍大款」的vba。

乙個比較重要的更新在2023年9月,我公司在重慶試車場的乙個同事問我能否在程式中加入布勞斯曲線計算功能,並且在casio計算器中實現,我從他那裡拿到了設計引數並著手開始研究布勞斯曲線。參考李運勝博士《布勞斯曲線在高速環道幾何設計中的應用》及《高速環道幾何線形的運動學評價》兩篇**,高速環道是汽車試驗場中專供汽車進行連續高速行駛試驗的閉合迴圈跑道,其常用的幾何設計方法有布勞斯曲線設計法和麥克康納爾曲線設計法。在以上兩種高速環道幾何設計方法中,我國道路設計工作者對麥克康納爾曲線設計方法已經有所了解,但對布勞斯曲線的研究卻少之又少。目前中國已經建成投產的試車場有海南汽車試驗場、定遠總後汽車試驗場、襄樊汽車試驗場、通縣交通部公路交通試驗場、農安一汽汽車試驗場等,其高速環道幾何設計都無一例外地採用了麥克康納爾曲線,但李運勝博士的研究成果表明:在同等設計條件下如果幾何線形改用布勞斯曲線,則其高速環道的運動特性可以得到全面的提高。因此,在今後中國高速環道幾何設計中,他推薦優先考慮採用布勞斯曲線作為高速環道的幾何線形,以獲得比麥克康納爾曲線更佳的運動學特性和行駛舒適性。

這裡說下試車場的一些背景。我公司承建了中國第乙個汽車試驗場——解放軍定遠汽車試驗場。2023年大眾試車場正式建成試車後,一公司在國內試車場領域聲名鵲起,上海f1賽車場業主聞名主動邀請公司參與施工。中鐵四局一公司逐步成為國內試車場施工隊伍中的「金字招牌」。國內一大批知名的汽車廠家紛紛慕名前來洽談合作事宜。2023年,公司迎來了試車場建設的又一次高潮,大眾二期、比亞迪、一汽農安、洛陽一拖、長城等五個試車場同時施工。2023年,承建了重慶試車場和宣城廣德試車場。在試車場領域有著舉足輕重的位置,2023年1月,在安徽黃山承辦中國首次汽車試驗場建設發展研討會。雖然承建了這麼多試車場,但由於試車場領域的技術封鎖,座標都是用外國人提供的cad中量取的座標,或者用軟體計算,他們的軟體費用昂貴。

利用泰勒展開式和微積分,我終於首次完成了布勞斯曲線的座標方程推導,並在程式中增加了布勞斯曲線的分段計算。主程式只需要按照原來的辦法分段就行了,在zh、hy、yh、hz點斷開,第一布勞斯曲線起算點是zh點,第二布勞斯曲線起算點是hz點,起算方位角是前進方向上的起算點方位角。中間圓曲線起算點可以是圓上的任意一點。泰勒展開式涉及到5次方項,利用楊輝三角係數展開,求積分,合併之後x座標有弧長l的1、7-17高次方項,y座標有弧長l的4、5、10-13、16-21高次方項,這些高次方項不能省略,否則計算進度達不到1公釐,卡西歐計算器計算時間較長,電腦計算輕而易舉。高等數學裡面相關的微積分知識還好沒有忘記多少,積分學的基本定理就是大名鼎鼎的牛頓萊布尼茲(newton-leibniz)公式,這是乙個非常重要的公式,它給出了定積分與不定積分之間的聯絡。定積分近似計算具體實現方法就是採用矩形法、梯形法、拋物線法(辛普森simpson法)、龍貝格romberg法、牛頓-柯特斯newton-cotes求積公式、高斯gauss求積公式。復化梯形公式和拋物線求積公式,精度較高,計算較簡,使用非常廣泛。romberg求積方法,演算法簡單,當節點加密提高積分近似程度時,前面的計算結果可以為後面的計算使用,因此,對減少計算量很有好處,並有比較簡單的誤差估計方法。gauss型求積,它的幾點是不規則的,所以當節點增加時,前面是計算函式值不能被後面利用,計算過程比較麻煩,但精度高,特別是對計算無窮區間上的積分和旁義積分,則是其他方法所不能比的。比較之後我選用了復合辛普森法進行試算,分段數目14段才能滿足1公釐的要求,如果要0.1公釐的精度,則分段數目20段才能滿足要求。卡西歐可程式設計計算器利用積分函式,也可以完成定積分近似計算。casio 4500、4800、4850的積分計算使用simpson(辛普森)法,而5800使用gauss(高斯)法。定積分∫[a,b]f(x)dx在fx-4800p程式設計計算器中的表示式為∫(f(x),a,b,n),在fx-5800p程式設計計算器中的表示式為∫(f(x),a,b,tol),其中的f(x)為被積函式,x為積分變數,a為積分下限,b為積分上限,n為分割數,tol為誤差允許公差範圍。四款計算器中,4500計算器在積分計算中要占用g/h/i/j/k/l六個字母變數,4800/4850計算器則占用k/l/m/n四個字母變數,而5800計算器不占用字母變數。

準備實現的乙個功能是加入高速環道麥克康納爾曲線座標的計算。演算法程式已經明確,缺少的就是切線支距法方位角的推導和具體資料的驗證。

許多程式設計師可能看過《老程式設計師十年生涯黯然總結》,作者是一名計算機碩士,這是一篇非常勵志的程式設計師人生總結,他的堅持和毅力最終讓他獲得了成功。他總結vb程式設計師的三個境界:

(1)所有**都只放在窗體檔案中的,屬於菜鳥級,他們只會從面板上拖控制項,設定屬性,然後再給事件編碼。

(2)工程中有bas模組的,屬於中間級,他們已意識到有大量的**是重複出現的,應該將其抽取出來作為公用模組。

(3)工程中有cls模組的,屬於高手,他們已掌握了物件導向的思想,並能應用這種思想來解決實際問題。

我現在只會在窗體上拖拖控制項實現一些簡單的功能,作為乙個業餘程式設計師,拖拖控制項已經夠用了。當初學習fortran77語言的時候,書本上介紹說fortran語言長於計算,但實際使用過程中發現,fortran77語言單精度型資料往往不能滿足要求,對於雙精度型資料運算及轉換處理稍不注意就會產生誤差,例如定義雙精度型變數pi=3.1415926,如果不在後面加上d10之類的數字,他會自動加上一連串莫名其妙的數字,這應該算是fortran的乙個bug,fortran77編譯器執行於dos下,16位的dos作業系統與32位windows作業系統差別不小,不知道後來的fortran90修改沒有。而vb的變體變數預設16位,後面會自動補零,所以vb也是長於計算的。vb雖然很難寫出綠色程式,但是只要乙個程式演算法合理,程式外觀介面友好,程式**健壯可靠,我想綠色不綠色一樣會有人喜歡的。「書山有路勤為徑,學海無涯苦作舟」,對於程式設計還有很多的東西要學習,對於程式演算法希望與大家交流。

ccf 高速公路

問題描述 某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由於經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。現在,大臣們幫國王擬了乙個修高速公路的計畫。看了計畫後,國王發現,有些城市之間可以通過高速公路直接 不經過其他城市 或間接 經過乙個或多個其...

201509 4 高速公路

鄰接表存圖 include include include define maxn 200010 using namespace std int dfn maxn low maxn int clock,top 當前元素是被訪問的序號,模擬棧的首部 bool instack maxn intstack...

CCF高速公路

新學了tarjan演算法,今天中午之前還沒聽過,用dfs硬寫加了點優化得了70,對路的演算法還是給力,直接滿分。回頭整理一篇關於強連通分量的部落格,另外這次往後就慢慢全用c 了。include include include include define maxsize 10005 using na...