GeoGebra 3D 地球儀製作報告

整理目前作圖的步驟、方法、設計取捨與資料來源。此頁是靜態 HTML,可直接用瀏覽器開啟或另存下載。
下載 GGB 檔 下載指令清單 下載 GeoPoint 工具 XML 下載海岸線資料
152海岸線子列表
3797動態簡化後總座標點
468目前單條最大點數
34 KBGGB 檔案大小

目標與成果

需求做法
可旋轉的 3D 地球儀使用 GeoGebra 3D 視圖,球面以 Sphere(O, r) 建立。
經緯度線避免 Sequence(Curve(...)) 不渲染,改用經緯度列表 + GeoPoint + Polyline
兩自由點與最短路徑P = Point(globe)Q = Point(globe),路徑用 CircularArc(O, Pdraw, Qdraw)
近似世界地圖使用 Natural Earth 1:50m coastline 真實海岸線資料,轉成球面 polyline。
代數區簡潔全部海岸線收在單一 coastCoords list of list,透過外層 Zip 一次生成。
目前版本保留 GeoPoint(<point>, <radius>) 自製工具作為語意化轉換工具:輸入 (longitude, latitude) 與半徑,輸出球面 3D 點。

製作流程

1. 建立球面

定義 rdrawR、球心 Oglobe = Sphere(O, r)

2. 建立 GeoPoint

把經緯度點轉為球面 3D 點,避免主構圖中反覆展開三角公式。

3. 處理海岸線

讀入 Natural Earth 50m coastline,切開日期變更線,做 Douglas-Peucker 簡化。

4. 批次繪圖

coastCoords 保存所有海岸線,再用 Zip 一次生成全部 polyline。

5. 修正可見性

線條繪在 drawR 外層;經緯線也改用 Polyline,避免 3D Curve list 不顯示。

處理項目方法理由
點數分配依海岸線長度動態分配大洲輪廓保留較多細節,小島避免過度細緻。
視圖設定開啟 Algebra + 3D GraphicsGeoGebra 檔案開啟時直接可見繪圖區。
最短距離theta = Angle(P, O, Q),真實距離可用 6371 * theta優先使用 GeoGebra 原生命令,避免手寫 dot product。

核心指令

目前核心指令節錄
r = 3.5
drawR = r * 1.04
globe = Sphere(O, r)
latitudeCoords = Sequence(Sequence((lambda, phi), lambda, -180, 180, 10), phi, -latMax, latMax, latStep)
longitudeCoords = Sequence(Sequence((lambda, phi), phi, -90, 90, 10), lambda, -180, 165, lonStep)
latitudeLines = Zip(Polyline(Zip(GeoPoint(C, drawR), C, coords)), coords, latitudeCoords)
longitudeLines = Zip(Polyline(Zip(GeoPoint(C, drawR), C, coords)), coords, longitudeCoords)
coastCoords = {{(180, 68.9834), (170.161, 69.6266), (170.538, 68.8254), (166.82, 69.4996), (161.566, 68.9052), (160.911, 69.6063), (159.912, 70.5061), (152.509, 70.8345), (150.668, 71.4552), (150.017, 71.8957), (145.189, 71.6958), (145.759, 72.2259), (146.832, 72.2954), (144.169, 72.2588), (141.079, 72.5869), (139.359, 71.9514), (137.918, 71.3841), (137.94, 71.1334), (132.654, 71.926), (128.843, 71.6635), (129.21, 71.9169), (129.284, 72.092), (129.25, 72.7052), (124.541, 73.7513), (123.622, 73.1 ... }
coastlines = Zip(Polyline(Zip(GeoPoint(C, drawR), C, coords)), coords, coastCoords)
theta = Angle(P, O, Q)
greatCirclePath = CircularArc(O, Pdraw, Qdraw)
d_{PQ} = r * theta
物件意義
coastCoords所有海岸線的 list of list,每個子列表是一條海岸線的經緯度點。
coastlines外層 Zip 逐條取出海岸線,內層 Zip 將經緯度轉成球面點,再以 Polyline 繪製。
latitudeLines / longitudeLines以同樣的列表轉換方式建立,避開 Curve list 渲染問題。
greatCirclePath使用 CircularArc 表示兩點間的大圓弧。
GeoPoint 的數學意義

C=(longitude, latitude),半徑為 drawR,則轉換為:

X = drawR cos(latitude) cos(longitude)
Y = drawR cos(latitude) sin(longitude)
Z = drawR sin(latitude)

角度會乘上 pi / 180 轉成弧度。

參考資料與來源

資料用途來源
Natural Earth 1:50m Physical Vectors - Coastline世界海岸線與主要島嶼輪廓Natural Earth 1:50m Physical Vectors
Natural Earth Terms of Use確認資料授權Natural Earth Terms of Use
QuickMapTools Coastline 說明確認 coastline dataset 屬性與尺度QuickMapTools Coastline

Natural Earth 官方條款頁說明其 raster 與 vector map data 為 public domain;QuickMapTools 的 coastline 頁面也描述 coastline dataset 是 Natural Earth/NACIS 維護的 public domain vector layer。

注意事項與踩坑紀錄

3D 視圖 ID:本機 GeoGebra Classic 開檔時,需使用可見的 3D Graphics View 設定;錯誤的 view id 會開成設定面板或空白區域。
Curve list 問題:Sequence(Curve(...)) 的代數物件可能存在但 3D 視圖不渲染。因此經緯線改用 Polyline
線條半徑:海岸線、經緯線與最短路徑畫在 drawR,略大於球半徑 r,避免被半透明球面遮住。
後續可調參數:SIMPLIFY_EPSILON_DEGREES 控制海岸線簡化程度;動態點數預算控制大洲與小島細節分配。