Gnuplot 十分鐘的 3d 曲面奇航
請安裝 gnuplot 並下指令 gnuplot 進入其命令列。 Windows 用戶: 下載 gnuplot 其中的 gp???win32.zip 版, 解壓縮, 執行 bin/wgnuplot.exe。 從進入 gnuplot 之後開始算起, 請給我十分鐘 (到第二節為止), 讓你看看 3d 數學曲面之美。 操作完這篇之後, 或許你會想認真 學 gnuplot and 認真學多變數函數與微分幾何。
各種設定
請逐句分開剪貼, 逐步觀察每一個指令的效果。
splot x*x - y*y # 馬鞍面 # 請用滑鼠拉著圖形轉一下 set isosamples 20,20 # 提高畫線密度; 下一次畫圖時才看得見效果。 replot # 重畫 set hidden3d # 消除隱線; 下一次畫圖時才看得見效果。 replot # 注意: 現在曲面正面和背面的顏色不一樣了。 set contour # 畫等高線。 replot set cntrparam levels 20 # 提高等高線密度。 replot set pm3d # 按照高度著色。 replot reset # 清除所有設定, 恢復成預設值。 replot # 回復成第一次畫圖的樣子。
欲知詳請, 請下 help 指令。 例如等高線也可以畫在曲面身上
(而不是畫在底盤) -- 詳見 help set contour
。
曲面方程式集錦
請設定好你的偏好 (isosamples,
hidden, contour, pm3d, ... 等等), 然後逐一嘗試 splot
以下函數。
sin(x)/x*y*y
(x*x-y*y)/(x*x+y*y)
這個曲面在 (0,0) 的地方, 兩個 「二次極限」 存在但不相等, 所以 「二重極限」 不存在。- 先定義一個函數:
sinc(x)=sin(x)/x
然後再把它旋轉出來的立體曲面:sinc(sqrt(x*x+y*y))
用 splot 指令畫出來。
接下來用參數式畫一顆球:
set parametric # 進入參數式模式。 splot cos(u)*cos(v), cos(u)*sin(v), sin(u) unset pm3d # 著色模式怪怪的; 取消! replot # 線條間隔怪怪的? splot [-pi:pi] [-pi/2:pi/2] cos(u)*cos(v), cos(u)*sin(v), sin(u)
畫球的時候, 預設 u 與 v 的參數值變化範圍是 -5 到 5, 所以線條的間隔怪怪的 (從 -3.14 到 3.14 繞了一圈之後, 第二圈畫線的位置就亂掉了...) 最後一個指令改將 u 的範圍限制在 -3.14 到 3.14 之間, v 的範圍限制在 -1.57 到 1.57 之間。
注意: 參數式模式下, 變數是 u 與 v (而不再是 x 與 y), 且 splot 後面要有三個函數, 分別代表 x,y,z 座標。 以下的函數都在參數式模式底下繪畫。
- 八面粽: [-pi:pi] [-pi/2:pi/2] (cos(u)*cos(v))**3, (cos(u)*sin(v))**3, sin(u)**3
- 甜甜圈:
[-pi:pi] [-pi:pi] cos(u)*(R+cos(v)), sin(u)*(R+cos(v)), sin(v)
- 螺旋面:
[0:3*pi] [0:1] v*cos(u),v*sin(u),u
- 分不出正反面的 Moebius Strip:
[0:2*pi] [-1:1] cos(u)+v*cos(u/2)*cos(u),sin(u)+v*cos(u/2)*sin(u),v*sin(u/2)
pm3d 的調色盤
在 pm3d 模式下, 其實可以用 set palette
指令,
自己設定調色盤。 每次 gnuplot 要畫一小塊四邊形時, 就會用那一小塊的
z 值 (其實是四個頂點垂直高度的平均值) 去查閱你所設定的調色盤。
它會將 z 值存在一個變數 gray 裡面,
用你給的公式去計算出紅藍綠的成分。 它給你的 gray 變數, 數值保證介於
0 與 1 之間, 0 表示曲面最低點, 1 表示曲面最高點。 你給它的紅藍綠值,
數值也必須介於 0 與 1 之間。 例如:
set palette model RGB functions 0,gray,1-gray
這個調色盤的最低點 (gray=0) 是藍色 (0,0,1); 最高點 (gray=1) 是綠色 (1,0,0); 中間高度 (gray=0.5) 是暗青色 (0, 0.5, 0.5)。set palette model RGB functions 1-gray,1,gray
這個調色盤的最低點是黃色 (1,1,0); 最高點是青色 (0,1,1); 中間高度是淡綠色 (0.5, 1, 0.5)。
我則偏好採用 HSV 方式指定顏色。 右圖取自 維基百科。 想像一個圓錐體, 最底下是黑色; 軸心是不同明暗度的灰色; 最上面 (也是最亮的一片橫切片) 的圓心是白色, 而外環則是色彩最鮮艷的一圈。 用三個數值, 可以定位出色彩圓錐當中的一個點: Hue 選定色相 (某個縱切片直角三角形); Saturation 選定彩度 (距離軸線有多遠? 以百分比表示); Value 選定明度 (某個橫切片圓形)。
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/ma/3dsurf.php; 您所看到的版本: February 14 2012 10:32:25.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。