IupMglPlot:“PLANAR_SURFACE”モード Plot

2016-05-22 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
7、2、0、0、1、 0、0、0、0、0(40)で、換算ポイント 88pt 。
「Firefox」6位ダウンも復帰。
「Perl」「C言語」「化学業界」「硝子業界」「FM COCOLO」「e-radio」、
「グルコサミン」「Python」bg値変動のみ。「FM青森」全く変化無し。
・-・ - -・

さて、本文。

先日(2016-05-11)の記事「GSL Shell 学習:IupMglPlot で 3D Plot
では、3次元空間内での点を描画。即ち“Scatter Plot”(3D散布図)でした。
これは、“Linear Datasets”に依る“MARK”モードでのプロット。

今回は、“Surface Plot”(サーフェース図)について。


IupMglPlot」では、
“Planar Datasets”に依る“PLANAR_SURFACE”モードでのプロット。

これは、2次元データの様だが、

  “IupMglPlotNewDataSet”では、次元数は“1”とすべし

とある。

今回は、適当な GrayScale 画像をサンプルとした。
読み込みは、“IM”モジュールで。
それは、256x256 サイズだった。
表示が重いかもしれないので、間引きして 25x25 とした。


出来上がったのは、・・・・・
local lfs = require'lfs'
local im = require'IM' -- 自作モジュール
IN, err = im.imOpen( 'hoge.tif' ) -- 入力モード オープン
xx, yy, mode, Type, err = im.imReadInfo( IN ) -- 画像情報 取得
data = ffi.new( 'uint8_t[?]', xx*yy ) -- 読み込みバッファ確保
err = im.imReadData( IN, data, 0, -1 ) -- 画像データ取得
im.imClose( IN )

local Iup = require'IUP' -- 自作モジュール
Iup.Open( 0 ) ------------ これ必須!!!
-----
local mgl = ffi.load( 'iup_mglplot' ) -- 「iupgl.dll」を使っている!
ffi.cdef[[
void IupMglPlotOpen(void); // Initialize IupMglPlot widget class
Ihandle* IupMglPlot(void); // Create an IupMglPlot widget instance
int IupMglPlotNewDataSet(Ihandle* ih, int dim);
void IupMglPlotSetData(Ihandle *ih, int ds_index, double* data, int count_x, int count_y, int count_z);
]]
------------------------------------------------------------

mgl.IupMglPlotOpen()
mp = mgl.IupMglPlot()
dt = mgl.IupMglPlotNewDataSet( mp, 1 ) -- Planar data has 2 dimensions, but use dim=1

xt=math.floor(xx/10)
yt=math.floor(yy/10)

Z=ffi.new('double[?]', xt*yt )
j=0; k=0
for y=0, yt-1 do
for x=0, xt-1 do
Z[j]=data[k]; j=j+1; k=k+10
end
k=k-10*xt+10*xx
end
mgl.IupMglPlotSetData( mp, dt, Z, xt, yt, 1 ) ------ 下記 AXS_XMIN ~ AXS_XMAX 間

Iup.SetAttribute( mp, 'DS_MODE', 'PLANAR_SURFACE' ) -- これがメイン =========

xxs=string.format( '%s', xx )
yys=string.format( '%s', yy )
Iup.SetAttribute( mp, 'TITLE', 'PLANAR Plot' )
Iup.SetAttribute( mp, 'SIZE', '250x300' ) -- 表示領域

Iup.SetAttribute( mp, 'AXS_XLABEL', '-X-' )
Iup.SetAttribute( mp, 'AXS_YLABEL', '-Y-' )
Iup.SetAttribute( mp, 'AXS_ZLABEL', '-Z-' )

xts=string.format( '%s', xt )
yts=string.format( '%s', yt )
Iup.SetAttribute( mp, 'AXS_XMIN', '0' )
Iup.SetAttribute( mp, 'AXS_XMAX', xts )
Iup.SetAttribute( mp, 'AXS_YMIN', '0' )
Iup.SetAttribute( mp, 'AXS_YMAX', yts )
Iup.SetAttribute( mp, 'AXS_ZMIN', '0' )
Iup.SetAttribute( mp, 'AXS_ZMAX', '255' )

dlg = Iup.Dialog( mp )
Iup.Popup( dlg, 200, 100 )
これで、表示出来て、
マウスドラッグでの操作が出来た。

やはり、表示は重かった。
( 25x25 でも !!! )


何はともあれ、3次元Plotも行けますネ。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


160424
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク