|
オープンソースの「ParaView」という可視化ソフトと連携することを考えます。
データファイルの構造が分かると他アプリケーションと連携することができます。
ParaViewでは色々なファイルが読み込み可能ですが、ここではレガシーvtkファイル(Visualization Tool Kit)を十進BASICで
作成します(※世間的にはPythonを使うらしい)
vtkファイルにはアスキー形式(テキストファイル)とバイナリー形式とありますが、バイナリー形式は詳細不明なので
アスキー形式を作成します(※notepad等で内容を確認することができます)
このプログラムでは3次元陽関数 z=f(x,y)を計算しています。
また、ParaViewでは点(x,y,z)に対してスカラー値を設定することができます。(※ベクトルも設定できます)
十進BASICのグラフィックでいう点(x,y)のスカラー値は色(濃度値)ですが、ParaViewでは任意に設定できます。
プログラムでは、スカラー値にZ値(高さ)を設定しました。
なお、私の実行環境ではParaView ver 5以上は起動できませんでした(グラフィックドライバー(デバイス)が未対応?らしい)
その為、今回ParaView ver4.4.0を使用しました。下記URLからダウンロードしてください(Windows版、Linux版、Mac版、各OS版及び各ver)
ParaViewの詳しい操作及び、vtkフォーマットについては同梱されているドキュメント(※もちろん英語です)もしくは、ネット上で検索してください。
私も色々と模索しているところです。
ParaViewは日本語PATH、日本語ファイル名には対応していないようなので注意が必要です。
ParaViewのFileメニューから「open」で、このvtkファイルを読み込んでください(又はファイルをD&D)
もしこの時何も表示されない場合は、Propertiesにある「Apply」のボタンを押してください。
Pipeline Browserの中の目のようなアイコンをクリックするとそのレイヤーを表示、非表示に切り替えできます。
表示された図形はマウスでグリグリ動かすことができます。
「Delete」ボタンを押すと、メモリー上からデータが消去されます。
coloringの「Solid Color」をここでは「value」に変更するとスカラー値が採用されます。
coloringの「Edit」又は2行左から2列目のアイコンを押すとColor Map Editorが開き、「Choose preset」のアイコンからパターンを変更できます。
その時うまく適用されない場合は、「Rescale To Data Range」のアイコンをクリックしてください。
「3D」ボタンを押すと「3D」と「2D」が切り替わります。
X-Y-Z軸に目が描かれているアイコンを押すと座標軸を非表示にできます。その隣のアイコンでセンターのマークがついたり、消えたりします。
※連番vtkファイルには別の意味があるので、ここでは敢えて連番ファイルとして書き出しはしていません。
LET XSIZE=50
LET YSIZE=50
INPUT PROMPT "MODE(0 - 41)=":MODE
FILE GETSAVENAME F$,"vtkファイル|*.vtk"
IF F$="" THEN STOP
IF POS(UCASE$(F$),".VTK")=0 THEN LET F$=F$&".vtk"
OPEN #1:NAME F$
ERASE #1
PRINT #1:"# vtk DataFile Version 3.0"
PRINT #1:"plane"
PRINT #1:"ASCII"
PRINT #1:"DATASET STRUCTURED_GRID"
PRINT #1:"DIMENSIONS";XSIZE;YSIZE;1
PRINT #1:"POINTS";XSIZE*YSIZE;"float"
LET XS=-5
LET YS=-5
LET XE=5
LET YE=5
LET STX=(XE-XS)/XSIZE
LET STY=(YE-YS)/YSIZE
LET SCALE=10
FOR Y=0 TO YSIZE-1
FOR X=0 TO XSIZE-1
LET Z=FUNC(MODE,XS+X*STX,YS+Y*STY)
PRINT #1:X;Y;Z
NEXT X
NEXT Y
PRINT #1:"POINT_DATA";XSIZE*YSIZE
PRINT #1:"SCALARS value float"
PRINT #1:"LOOKUP_TABLE default"
FOR Y=0 TO YSIZE-1
FOR X=0 TO XSIZE-1
LET Z=FUNC(MODE,XS+X*STX,YS+Y*STY) !'スカラー値(Z値)
PRINT #1:Z
NEXT X
NEXT Y
CLOSE #1
END
EXTERNAL FUNCTION FUNC(MODE,X,Y) !'3次元陽関数 z=f(x,y)
SELECT CASE MODE
CASE 0
LET FUNC=COS(5*SQR(X*X+Y*Y))
CASE 1
LET FUNC=X*Y*(X^2-Y^2)
CASE 2
LET FUNC=(X^2-Y^2)/2
CASE 3
LET FUNC=EXP(-X^2-Y^2)*(X^2+Y^2)
CASE 4
IF(X^2-1)*(X^2-9)*(Y^2-1)*(Y^2-9)>0 THEN
LET FUNC=2
ELSE
LET FUNC=0
END IF
CASE 5
LET Z=4-X^2-Y^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 6
LET Z=2*(X^2+Y^2-3)
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 7
LET FUNC=EXP(-Y)*SIN(3*X)
CASE 8
LET FUNC=MIN(3,X^2+Y^2-4)
CASE 9
LET Z=1-X^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
LET FUNC=MIN(Z,Y^2)
CASE 10
IF X=0 AND Y=0 THEN
LET FUNC=0
ELSE
LET FUNC=X*Y/(X^2+Y^2)
END IF
CASE 11
LET FUNC=LOG(X^2+Y^2+.1)
CASE 12
LET FUNC=MAX(X^2+Y^2-(X^2+Y^2+Y)^2,-2)
CASE 13
LET FUNC=MIN(MAX(X^3-3*X*Y+Y^3,-4),0)
CASE 14
LET FUNC=SIN(X)*SIN(Y)*SIN(X+Y)
CASE 15
LET FUNC=COS(PI*X)*COS(PI*Y)
CASE 16
LET FUNC=COS(3*X*Y)
CASE 17
LET FUNC=SQR(COS(X)^2+SINH(Y)^2)
CASE 18
LET Z=1-X^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
LET FUNC=MIN(Z,.5*(1.5*X-Y)^2)
CASE 19
LET Z=1-(SQR(X^2+Y^2)-1.5)^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 20
LET FUNC=6-4*SQR(X^2+Y^2)
CASE 21
LET Z=1-X^2
LET ZZ=1-Y^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
IF ZZ>0 THEN LET ZZ=SQR(ZZ) ELSE LET ZZ=0
LET FUNC=MAX(Z,ZZ)
CASE 22
LET Z=1-(SQR(X^2+Y^2)-1.5)^2
LET ZZ=.7-X^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
IF ZZ>0 THEN LET ZZ=SQR(ZZ) ELSE LET ZZ=0
LET FUNC=MAX(Z,ZZ)
CASE 23
LET FUNC=EXP(-X^2+Y^2)
CASE 24
LET Z=1-X^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
LET FUNC=MIN(Z,.25*(Y^2-2.5)^2)
CASE 25
IF X=0 OR Y=0 THEN
LET FUNC=1
ELSE
LET FUNC=SIN(X*Y)/X/Y
END IF
CASE 26
LET Z=1-.25*(Y-SIN(X))^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 27
LET FUNC=2*ABS(COS(X*PI)*COS(Y*PI))^3
CASE 28
LET FUNC=(X^3+Y^3)/10
CASE 29
LET FUNC=SQR(X^2+(Y+1)^2)*SQR(X^2+(Y-1)^2)
CASE 30
LET FUNC=X^3-X*Y^2
CASE 31
LET FUNC=SIN(X*Y)
CASE 32
LET FUNC=3*EXP(-.5*((X-3*INT(X/3)-1.5)^2+(Y-3*INT(Y/3)-1.5)^2))*COS(PI*((X-3*INT(X/3)-1.5)^2+(Y-3*INT(Y/3)-1.5)^2))
CASE 33
LET FUNC=EXP(.5*X)*SIN(Y)
CASE 34
IF X>0 AND Y>0 THEN
LET FUNC=0
ELSE
LET FUNC=6*EXP(-X^2-Y^2)*(X^2+Y^2)
END IF
CASE 35
LET Z=4-(X-2*INT((X+1)/2))^2-(Y-2*INT((Y+1)/2))^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 36
LET FUNC=SIN(Y)+SIN(2*X)+SIN(3*Y)+SIN(4*X)+SIN(5*Y)
CASE 37
LET FUNC=COS(X)+COS(2*Y)+COS(3*X)+COS(4*Y)+COS(5*X)
CASE 38
LET FUNC=SIN(X)-COS(Y)+SIN(3*X)+COS(3*Y)+SIN(5*X)-COS(5*Y)
CASE 39
LET FUNC=(X^2+SQR(2)*X*Y+Y^2-4)*(X^2-SQR(2)*X*Y+Y^2-4)
CASE 40
LET FUNC=(Y^2-X^4+X^6)*(X^2-Y^4+Y^6)
CASE 41
LET FUNC=SIN(2*X)*COS(Y)/2
CASE 42
!' LET FUNC=IM(EXP(-COMPLEX(X,Y))) !'複素数モード
END SELECT
END FUNCTION
|
|