2011年6月19日

[心得]gnuplot in action -- chapter 8

 這一章節主要提到splot也就是surface plot,大多用在3D繪圖上面
set isosamples 30
splot [-2:2][-2:2] exp(-(x**2+y**2))*cos(x/4)*sin(y)*cos(2*(x**2+y**2))

這裡的isosamples設定xy要各取幾個sample點,預設是10,實在是效果蠻差的,所以改成了30,而且這個設定只對function有用,如果是data file繪製的,當然就不會有sample點的問題了

set hidden3d
replot



可以看出來hidden3d就是一些隱線的效果,因為繪製3D圖形的時候,如果把一些可能被視覺遮住的隱藏,在繪製上會比較快

 set hidden3d trianglepattern 7

trianglepattern指的是填補線條的方式,1為x軸方向,2是y軸,4為對角線方向,三者可以用or運算相加,所以上面的例子是x,y再加上對角線,看起來就是很多三角形
set contour [ base | surface | both ]

set contour base
replot

set contour為z軸上取橫切面,切下一塊xy平面,至於要把線畫在哪裡就有兩個地方,一個就是下面的xy軸平面上,好處是不會干擾到上面的surface,如果要畫到那上面去也是可以
set cntrparam [ linear | cubicspline | bspline ]
set cntrparam [ points {int:q} ]
set cntrparam [ order {int:q} ]
set cntrparam levels [ auto [{int:n}]
                       | discrete {flt:z0} [, {flt:z1} [, ...]]
                       | incremental
                            {flt:start}, {flt:inc} [, {flt:end}] ]
這是一些參數的設定
由於過去的硬體限制,要做到即時3D繪圖很吃力,隨著硬體的進步,現在已經是家常便飯了,不過對於要取得特定視角來取得最好的3D視覺效果,這也是必要的,不然雖然手動調整了3D視角,可是下次就忘記了,還要再找一次
指令如下

set view [ {flt:polar} [, {flt:azimuthal}
           [, {flt:scale} [, {flt:z_scale} ]]]]
set view map
set view的前兩個參數分別為水平[0:180]跟垂直[0:360]的角度,後面兩個分別是zooming的大小,set view map是鳥瞰圖,等同set view 0,0,1,1
書中給了一個有趣的應用,用set view map來展示contour圖形,省略了surface

set view map  
set size square
unset surface
set contour
set cntrparam levels 10
set clabel "%.1f"
set isosamples 150

沒有留言: