登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
源碼專案 3D 顯示的地震資訊軟體- EQuake

3D 顯示的地震資訊軟體- EQuake

Riley Davis 與 David Souther 在 EQuake 上進行合作,這是他們歷經約一天時間開發出的 3D 地震視覺化工具。他們討論到他們的動機與做法。

我們的靈感來自這則 xkcd 漫畫,在漫畫中和地震有關的推特跑得比地震波還快。我們兩個人都喜歡透過和人們早已熟悉的尺度相連接,讓複雜的科學資訊更易理解。我們覺得把實際地震的波動畫在地球上,看看這些波動實際上用多快速度通過地殼,會是一件有趣的事。這套工具能夠在其他地震發生時,輕易用來在地圖上繪製出推特(或其他地理資料)。為了加以實現,我們使用了來自美國地質調查局 (U.S. Geological Survey,USGS) 的資料,加上 Three.js 與 S3age。

我們從 USGS 的資料庫取得相當於一天的地震事件。這份 USGS 資料標注了經緯度、時間、震度,此外還有其他我們用不到的資料。我們在地球表面放置 3D 標記,基於地震震度更改標記的大小與顏色。

Three.js 負責處理專案的繪製與模型。不過,我們發現 Three.js 的 API 與範例程式碼比我們所需要更為複雜。David 之前做了 S3age 程式庫,這是一個簡化 Three.js 場景建構的 API 包裝。使用這個程式庫讓我們簡化了初始程式碼。

new S3age "#container",
    scene:
        lights: [ new THREE.AmbientLight 0xdddddd ]
        children: [ earth = new Earth() ]
    controls: S3age.Controls.Sphere

我們建立了一個 Globe 基本類別,其中提供下列方法:

addMarker(Marker::THREE.Object3D[, lat, lon])

該方法會在地球表面的指定地點放置一個標記。標記的本地 3D 空間定位將 Z 軸沿著半徑向外指出,Y 軸指向北極,X 軸則與上述兩軸垂直地指向東。

class window.Quake extends THREE.Object3D
    constructor: (quake)->
        THREE.Object3D.call @

在 JavaScript 中,Object.create 也會延伸 THREE.Object3D。這讓我們進一步延伸 Quake 類別,以便從 Three.js 基本操作中,建立更為複雜的幾何形狀與 3D 構件。S3age 還提供了一套物理機制,會對 S3age 場景中所有有 update 方法的物件,呼叫 update: (clock)->。

在此應用程式中,Earth 延伸了 Globe 類別,增加了用 NASA 地球紋理組成的球體表面。繪製的部分全都交給 S3age 處理,EQuake 應用程式只負責 3D 幾何與標記。S3age 還提供對場景的控制。一套能輕易且快速在地球表面導向的程式庫,對未來的視覺化專案會是一大幫助。

你可以在 GitHub 找到 EQuake 的程式碼。S3age 提供了文件。Three.js 儘管有 API 方面的問題,但還是很棒的程式庫。請來看看並貢獻這個專案吧!


◎本文翻譯自 The New York Times,原作者為 Riley Davis 和 David Souther:
https://open.blogs.nytimes.com/2013/09/30/equake/?_r=0




自由軟體鑄造場電子報 : 第 231 期 從開放源碼的理念到提供源碼的義務

分類: 源碼專案