原程式檔案的讀寫方式、畫風如何量自它的繪圖機輸出, 以及這個 repo 裡各部分的位置。
回到 README。
每個 run 資料夾內都有一個 HPGL 檔,內容為純文字的繪圖機向量指令。
它並非對程式繪圖行為的描述,而即是程式逐筆繪出的那張圖。
因此本專案的畫風係經量測該檔案而得,並非依論文插圖推測。
-
投影法為等面積 Schmidt 投影。 此結論係經量測而得,非出於假設: 大圓在等角投影下為正圓弧,在等面積投影下則非。 實測圓弧擬合殘差為 0.0044 / 0.0062 / 0.0010,等面積投影的預測值為 0.0040 / 0.0055 / 0.0007,若為等角投影則應為 0。
-
星形符號:σ₁ 為五角、σ₂ 為四角(斜置)、σ₃ 為三角。其大小非固定值:
size = 0.1004 + 0.0928·(0.5 − Φ)·λᵢ(以 21 張圖、63 顆星擬合,rms 0.00063)。 Φ = 0.5 時三者等大,故大小順序在 Φ = 0.5 兩側會反轉。 -
擦痕符號為剪切對偶,非單一箭頭:實心圓點搭配兩支平行軸線,各側偏 0.024, 故圖面上呈 Z 字形。頭部形式依信心度而定:S 無頭、P 每端一條單邊倒鉤、 C 每端一個兩段式細長頭。倒鉤與側偏所在側由
sign(滑動 · 走向)決定, 89 筆全數符合;若依運動字母判定則僅 83 筆正確。 -
粗箭頭位於圓外,沿 σ₁ 向內、沿 σ₃ 向外。 這些箭頭從來不是由張量計算而得。 DIAGRA 自己的說明把它們列在
SPECIAL CODES之下,81 與 82 是大號黑色的壓縮與張裂對,83-88 為小號與 空心變體;選定代碼後程式即詢問AZIMUTH OF ARROWS [0-360] ? :也就是方向由人逐支手動輸入,直到輸入
0結束迴圈。以 CH-01a 實測,σ₃ 那對 與解相差在 0.3° 以內,但 σ₁ 那對朝相反方向各差 3.5°,這是有人照著 INFO1 讀整數輸入的特徵,不是計算值。因此 archive 的圖版可能帶兩對、一對或完全沒有箭頭,與其張量無關。依 σ₁ 與 σ₃ 繪製、並略去傾伏超過 45° 的軸,是本重建版新增的便利功能;它重現了 90 個 archive run 中的 85 個。未能重現的五個,是當年完全沒輸入箭頭(QS0711-1、 0406-7A、一個回轉版 0404-04C)或只輸入一對(LL-3b、CH-01e)的 run, 且沒有任何幾何規則能區分它們:QS0216-14 在 σ₃ 傾伏 36.5° 時畫了該對, 而 QS0711-1 傾伏 35.4°、三軸與前者相差都在 2.3° 以內,卻什麼都沒畫。 介面上的 Arrows 核取方框可關掉箭頭以符合這類圖版。
-
外框並非對稱於投影網中心。 93 個 archive HPGL 檔完全一致: x 自 −1.2527 至 1.2547、y 自 −1.3047 至 1.4585(單位為基準圓半徑), 標註皆為固定欄左對齊。本專案先前曾假設對稱,導致底邊偏低 0.15。
HPGL 匯出的實作方式是令 pytector.penrec 代替 matplotlib Axes,
重播 plot.plot_site 本身,因此檔案內容與圖面完全一致,
不存在第二套實作可能產生偏移。輸出對齊 archive 自身的框架
(400-5420 × 396-5928 繪圖機單位),由 tests/test_ui_contract.py 驗證。
舊有的 run 可直接讀入;反演完成後,pyTECTOR 會以原格式寫出 INFO1 與 MOHR1,
並顯示於介面上。
tests/test_report.py 以記錄的解重新產生這兩個檔案,並與原始檔案比對,
分別檢查版面(比對每個數字的欄位跨距)與數值。
目前狀態:兩站皆為 0 項版面差異、0 項數值差異。
刻意保留的兩處差異:
- 檔頭橫幅標示 pyTECTOR,不冒用 TENSOR 5.45 的名義。供程式解析的部分
(定寬表格、
03結果行)維持原樣,因此檔案仍可由pytector.tensorfile讀回。 RMU在正向應力接近零時可能相差數十個百分點,因其為比值。其餘各欄皆在 ±1 之內。
兩項容易實作錯誤的版面細節:
- 兩個旗標欄位寬 2 字元且靠右對齊,因此
!!會緊貼數字, 而單一個!前方需補一個空格。 - 標題為
<75與<45的兩欄,是同一統計量取通過門檻後的子集, 並非重複前一欄。0406-7 全部 29 筆的平均 ANG 為 21,低於 45 的 28 筆為 15, 差異即來自那筆 174° 的離群值。
係以資料檔、MOHR1、INFO1、Mesure_key.txt 相互對照解出,並以兩站 35 筆資料驗證。
格式為定寬 ASCII,每個 run 一個資料夾,輸入與輸出位於同一檔案:
| 位置 | 內容 |
|---|---|
[0:2] |
第一位=擦痕信心度 1=C、2=P、3=S;第二位=rake 從走向線哪一端量起(1=正規端,即傾向−90;2=另一端,此時存的是 180 − 輸入值) |
[2:5] |
真正的傾向,已經含象限字母的判斷,所以 SN 174 74E 是 84 不是 264 |
[5:7] |
傾角 |
[7:10] |
rake(pitch),從(傾向−90)那一端量起 |
[47:61] |
當年輸入的原始欄位;最後一欄可能是 rake(62N)或 trend(124) |
兩處實際遭遇過的陷阱:
- 滑動方向 = rake + 180°。 直接採用欄位值會導致 σ₁ 與 σ₃ 對調。
- 若某站所有面的傾角皆在 85-89° 之間,
sin(plunge) = sin(rake)·sin(dip)會使 rake 與 plunge 相差不到 1°,導致[7:10]看似 plunge,實則並非。 須以傾角範圍 42-89° 的 0406-7 才能確認。
03 結果行同為定寬格式(trend 佔 5 字元、plunge 佔 4 字元),中間無分隔符號。
以空白切分或以數字正規表示式擷取,皆會得到錯誤結果。
pytector/ 函式庫
core 幾何、準則、品質估計量
invdir INVDIR,Angelier 的參數化與兩段流程
modern S4MIN,同一準則的精確最小值
tensorfile 讀舊站檔
report 寫 INFO1 與 MOHR1
entry 解析打字輸入
plot Angelier 畫風的投影網
hpgl 繪圖機檔的讀與寫
penrec 把畫圖程式重播成繪圖機向量
rotate 旋轉與回轉慣例
tilt Andersonian 失配與逐步傾轉掃描
backtilt 回轉視窗
tiltui 傾轉檢驗對話框
splash, about 開啟畫面與 About
retro, ui_style 1991 模式與一般樣式表
archive 參考資料集的位置
pyTECTOR.py 桌面介面
tests/ 對 archive 的回歸測試
research/ 各項常數的量測過程,該資料夾另有 README