Skip to content

ExpTechTW/shaking_simulation

 
 

Repository files navigation

強震動室內家具行為模擬器

於瀏覽器中運作的強震動模擬器。讀取真實的強震觀測記錄(miniSEED 波形資料),依其波形對室內家具施加地動加速度,透過 3D 物理演算擬真重現地震時室內家具的行為(傾倒、滑動、擺盪等)。

Vite + React + Tailwind CSS + shadcn/ui 重構,介面為繁體中文。


技術架構

技術
建置 Vite 8
UI React 19、Tailwind CSS 4、shadcn/ui、Radix UI
3D 繪圖 three.js(three 0.185)
剛體物理 cannon-es 0.20
語言 TypeScript 5

模擬核心(Three.js 場景、Cannon 物理世界、DSP、波形/軌跡繪製、物理迴圈)封裝為與框架無關的 SimEnginesrc/engine/simEngine.ts),React 僅負責 UI 外殼並以訂閱機制反映引擎狀態;逐幀熱路徑直接寫入 DOM,避免每秒 60 次的 React 重繪。

src/
├─ engine/
│  ├─ mseed.ts       # miniSEED 解析器(counts/10000 = gal)
│  ├─ dsp.ts         # JMA 積分遞迴式、建物應答、正弦波生成
│  ├─ furniture.ts   # 家具目錄(住家 / 辦公室)
│  └─ simEngine.ts   # 模擬引擎(Three.js + cannon-es)
├─ components/       # React + shadcn UI(控制面板、波形、軌跡、HUD、說明)
└─ App.tsx

主要功能

  • 3D 即時物理演算:結合 three.js(3D 繪圖)與 cannon-es(剛體演算),即時模擬同時受地震波三分量(NS、EW、UD)輸入的複雜家具行為。
  • 多樣家具模型與客製:可配置書架、衣櫃、書桌、椅子、床、冰箱、天花板吊燈等。可自控制面板變更各家具「質量」與「重心高(%)」,比較參數差異造成的行為變化。
  • 波形圖連動視覺化:由讀入資料自動生成加速度・速度・位移圖(NS・EW・UD 三分量),並顯示與模擬進行時刻完全連動的播放游標。
  • JMA 計測震度:依 氣象廳計測震度算法(頻域濾波→向量合成→0.3 秒判定)計算並顯示讀入記錄的計測震度與震度階級。
  • 進階播放控制:可變更播放速度(0.25×〜2.0×)、調整振幅倍率(最大 50×,供放大弱震觀察)與起始時刻(跳過)。
  • 建物應答:多質點剪力型模型之時刻歷應答解析,可用指定樓層的地板應答震動。

讀取資料格式(miniSEED)

支援 miniSEED(SEED 2.x) 三分量加速度記錄。依通道方位碼(Z/N/E)自動分離為 UD / NS / EW。

  • 加速度換算10000 counts = 1 cm/s²(= 1 gal) → 加速度(gal) = counts ÷ 10000
  • 支援編碼:16/32-bit 整數、32/64-bit 浮點、Steim-1 / Steim-2 壓縮(自 Blockette 1000 判定)
  • 範例檔public/sample.mseed1A3A17C_20260707T044704Z_20260707T044804Z.mseed,測站 3A17C,3 分量 @ 50Hz,60 秒,計測震度約 2.3)。可於介面按「載入範例波形」直接使用。

若無記錄,亦可用「正弦波震動」指定方向・周期・最大位移・持續時間生成合成波。

關於「家具幾乎不動」

家具的傾倒/滑動有明確的物理門檻——大致要到計測震度 5 弱(約 150〜250 gal)以上才會發生。因此震度 1〜3 的弱震記錄,家具幾乎不動是物理上正確的結果(可由 UI 顯示的計測震度確認)。欲觀察明顯的傾倒/滑動,請:

  1. 提高「振幅倍率」(例如 20〜40×),或
  2. 改用強震記錄,或
  3. 用「正弦波震動」給予大位移長周期波(例:最大位移 20cm、周期 0.6s ≈ 2700 gal)。

counts→加速度 換算係數定義於 src/engine/mseed.tsCOUNTS_PER_GAL(預設 10000)。若你的測站靈敏度不同,請調整此常數;它會直接改變計測震度與家具反應。


解析方法(演算法詳述)

1. 訊號處理(DSP)

由加速度波形積分為速度・位移時,採氣象廳(JMA)官方積分遞迴式(齋藤1978 之係數設計)以抑制低頻雜訊導致的基線飄移:速度波形使用「截止 5 秒之 3 次 Butterworth 積分特性」,位移波形使用「1 倍強震計特性(固有周期 $T_0$ = 6 s、減衰定數 $h$ = 0.55)」之遞迴式。

速度:$v_t = G(a_t - a_{t-1} - a_{t-2} + a_{t-3}) - (A_1 v_{t-1} + A_2 v_{t-2} + A_3 v_{t-3})$

位移:$d_t = H(D_0 a_t + D_1 a_{t-1} + D_2 a_{t-2}) - (C_1 d_{t-1} + C_2 d_{t-2})$

遞迴式係數為 100Hz 設計,故非 100Hz 之記錄(如範例的 50Hz)會先線性重取樣至 100Hz。

計測震度另依 JMA 頻域算法計算(見 src/engine/jma.ts):對三分量加速度套用 JMA 濾波器(週期效應 $\sqrt{1/f}$ × 高頻截止 × 低頻截止)後反轉換取向量合成,求合計 0.3 秒以上超過的加速度 $a_0$,$I = 2\log_{10}(a_0) + 0.94$。

2. 家具動力學:非慣性座標系(偽力)+ 三區摩擦

驅動(非慣性/地動座標系):房間(地板・牆・天花板)於物理上固定不動,將當下地動加速度 $\mathbf{a}$ 以偽力 $-m\mathbf{a}$ 施加於每個剛體——等同結構動力學的「有效地震力」 $p_{eff}=-m\ddot{u}g$(Chopra)與 D'Alembert 原理;等效重力設為 $\mathbf{g}{eff}=(-a_x,\ -g-a_y,\ -a_z)$。視覺上再把場景依地動位移平移以呈現房間搖晃。此法讓家具直接感受真實的寬頻加速度(含高頻),避免「以位移驅動→經接觸二次微分還原加速度」在高頻的流失(此為早期版本家具反應偏弱的根因)。

三區摩擦(依台面水平加速度 $a_H$,$g_{eff}=\max(0,\ g+a_y)$)

  • 靜止($a_H < \mu_s g_{eff}$ 且 $a_H &lt; g_{eff},b/h$):接觸摩擦持住,無數值潛移。
  • 滑動($a_H \ge \mu_s g_{eff}$):以顯式庫倫滑塊積分水平速度(Newmark 1965/Shao–Tung 1999),$\mu_s = 1.3\mu_k$。
  • 傾倒($a_H \ge g_{eff},b/h$;$b$=半底寬、$h$=重心高):交由接觸求解器繞底邊傾倒/搖擺(Housner 1963)。

頻率相依(Ishiyama 1982):傾倒須加速度速度/持續時間同時足夠。故高頻記錄(如卓越 ~9 Hz 的近斷層)大型家具多半只搖不倒、傾倒門檻低的小物被拋落;長周期或大速度脈衝才使大型家具真正傾倒。

文獻依據:Chopra《Dynamics of Structures》有效地震力 $p_{eff}=-m\ddot{u}_g$;Housner (1963) 搖擺塊;Newmark (1965) 滑塊;Ishiyama (1982) 傾倒判準(加速度+速度雙判據)。傾倒臨界 $a=g,b/h$、滑動臨界 $a=\mu_s g$ 經數值實驗與解析解逐項對照吻合。

3. 數值穩定化

  • 物理時間步長 1/240 秒、求解器迭代 40 次,於瀏覽器取得負荷與精度的平衡。
  • 傾倒/搖擺交由接觸求解器自然演化;滑動以顯式庫倫滑塊覆寫(避免對固定地板的接觸過度固著);旋轉家具的本體慣量於未旋轉幾何下計算後再轉入世界座標。
  • 依家具個別的重心高(cogY)與半底寬決定傾倒臨界,重現貼近現實的傾倒力矩。

4. 建物應答(多質點剪力型模型)

等質量・等剛性剪力型建物之時刻歷應答解析。依構造種別略算式(S造 T₁=0.03H、RC造 T₁=0.02H,層高 4m)逆算剛度 $k$;阻尼採 Rayleigh 型;數值積分為 Newmark-β 法(平均加速度 β=1/4, γ=1/2)。剛度矩陣為三對角,以 Thomas 法每步 $O(N)$ 求解。水平二分量(NS, EW)解析,UD 直接使用地表波。


開發與建置

npm install      # 安裝相依套件
npm run dev      # 開發伺服器
npm run build    # 產出 dist/
npm run preview  # 預覽 build 結果

免責聲明

本模擬器為以教育・防災宣導為目的之簡易物理演算展示,並非準確重現或預測實際地震時家具行為、建物應答與室內災損之工具。結果取決於物理引擎的數值計算條件(時間步長、接觸剛度、摩擦模型等),相同輸入在不同設定下可能有很大差異。

請勿將本程式的計算結果,作為實際建築物或家具的耐震設計、安全性評估,或防災計畫・災損想定之依據。 現實家具的行為,會因地材的微小不均、建物的共振特性等各種因素而複雜變化。對於使用本程式所生之任何損害・不利益,作者概不負責。

讀取各機構之強震記錄時,請遵守其資料利用規約與出處標示條件。記錄資料本身不包含於本工具中。

About

在瀏覽器中運行的強震動室內家具行為模擬器。讀取真實 miniSEED 強震觀測波形,以偽力(非慣性座標系)+ 3D 剛體物理演算,重現地震時室內家具的傾倒、滑動與擺盪,並依氣象廳算法計算計測震度。

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 97.6%
  • CSS 2.0%
  • HTML 0.4%