3次元オブジェクト操作関数


PPBasicでは、Basicで計算したデータをそのままPostPlot3Dの三次元オブジェクトデータセットに転送し、Basic終了後に自由にデータを閲覧することが出来ます。ここではデータセット転送コマンドを解説します。


配列データをPP3D単層2次元格子データに転送(座標指定無し):set2DLat


set2DLat(nx,ny,z)
nx:x方向ノード数
ny:y方向ノード数
z(nx,ny):z座標の2次元配列データ

set2DLatはnx×nyの格子に{z(i,j),i<=nx,j<=ny}で指定されるz値を与え、PostPlot3Dの二次元格子データセットにデータを転送します。

set2DLatでは各ノードのx,y座標は自動的に作成されますので、ユーザーが座標を設定する必要はありません。手軽に2次元配列をグラフ化したいときにset2DLatは大変役立ちます。

 

#-----------------------------set2DLatサンプルコード

dim x(100,100),y(100,100),z(100,100)

nx=100
ny=100
for i=1 to nx
for j=1 to ny
x(i,j)=1.0/(nx-1)*(i-1)-0.5
y(i,j)=1.0/(ny-1)*(j-1)-0.5
x(i,j)=x(i,j)*6*3.141592
y(i,j)=y(i,j)*6*3.141592
a=(x(i,j)^2+y(i,j)^2)^(0.5)
z(i,j)=sin(a)/a*30
next:next

set2DLat(nx,ny,z)

#-----------------------------結果

 

 

 


配列データをPP3D多重2次元格子データに転送(座標指定):setM2DLat

setM2DLat(n,nx,ny,x,y,z,p)

n:格子データの枚数

nx(n):x方向ノード数
ny(n):y方向ノード数
x(Σnx(i)*ny(i)):x座標の1次元配列データ
y(Σnx(i)*ny(i)):y座標の1次元配列データ
z(Σnx(i)*ny(i)):z座標の1次元配列データ
p(Σnx(i)*ny(i)):物理量の1次元配列データ

setM2DLatコマンドは、nx(i)*ny(i)の格子からなる2次元シェルメッシュを同時にn枚作成します。各シェルのノード数は一次元配列変数nxおよびnyにそれぞれxおよびy方向のノード数を与えます。
また、ノード座標及び物理量は一次元配列x,y,zおよびpに以下に示す順序で格納します。

x,yおよびz座標はユーザーが自由に決めることが出来ます。これにより、PPBasicを用いた自由度の高い曲面集合を作成することが可能です。

 

 

#-----------------------------setM2DLatサンプルコード

dim nx(2),ny(2)
dim x(20000),y(20000),z(20000),p(20000)

nx(1)=50
ny(1)=50
nx(2)=nx(1)
ny(2)=ny(1)

n=0
zz=0
for l=1 to 2
for i=1 to nx(1)
for j=1 to ny(1)
n=n+1
x(n)=1.0/(nx(1)-1)*(i-1)
y(n)=1.0/(ny(1)-1)*(j-1)
r=sqrt(((x(n)-0.5)^2+(y(n)-0.5)^2))
if l=1 then z(n)=sin(r*3.141592*2)/3+zz
if l=2 then z(n)=cos(r*3.141592*2)/3+zz
p(n)=z(n)-zz
next:next
zz=zz+1
next

setM2DLat(2,nx,ny,x,y,z,p)

#-----------------------------結果

 

 

 


配列データをPP3D多重3次元格子データに転送(座標指定):setM3DLat

setM3DLat(n,nx,ny,nz,x,y,z,p)

n:格子データの枚数

nx(n):x方向ノード数
ny(n):y方向ノード数
nz(n):z方向ノード数
x(Σnx(i)*ny(i)*nz(i)):x座標の1次元配列データ
y(Σnx(i)*ny(i)*nz(i)):y座標の1次元配列データ
z(Σnx(i)*ny(i)*nz(i)):z座標の1次元配列データ
p(Σnx(i)*ny(i)*nz(i)):物理量の1次元配列データ

setM3DLatコマンドは、nx(i)*ny(i)*nz(i)の格子からなる3次元ソリッドメッシュを同時にn個作成します。各ソリッドのノード数は一次元配列変数nx、nyおよびnzにそれぞれx、yおよびz方向のノード数を与えます。
また、ノード座標及び物理量は一次元配列x,y,zおよびpに以下に示す順序で格納します。

x,yおよびz座標はユーザーが自由に決めることが出来ます。これにより、PPBasicを用いた自由度の高いソリッド集合を作成することが可能です。

 

 

 

 



配列データをPP3Dノードデータに転送:setVert1, setVert2, setVert3

setVert1:座標指定のみ
setVert2:座標+物理量を指定
setVert3:座標+RGBデータを指定
setVert1(nax,x,y,z)
setVert2(nax,x,y,z,p)
setVert3(nax,x,y,z,r,g,b)

nax:ノード数
x:ノードx座標(一次元配列)
y:ノードy座標(一次元配列)
z:ノードz座標(一次元配列)
p:ノード物理量(一次元配列)
r,g,b:ノード色(一次元配列)

setVertはnax個のノードをPP3Dノードデータに転送し、物理量またはノード色直接指定により色をつける事が出来ます。
setVert2で与えた物理量は、pressureとして認識されます。

 

#-----------------------------setVert1サンプルコード
#-----------------------------結果


PP3Dラインデータに線分を追加:addLine1, addLine2, addLine3, clearLineList

addLine1:座標指定のみ
addLine2:座標+物理量を指定
addLine3:座標+RGBデータを指定
addLine1(nax,x,y,z)
addLine2(nax,x,y,z,p)
addLine3(nax,x,y,z,r,g,b)

nax:1本の線分を構成するノード数
x:ノードx座標(一次元配列)
y:ノードy座標(一次元配列)
z:ノードz座標(一次元配列)
p:ノード物理量(一次元配列)
r,g,b:ノード色(一次元配列)

addLineはnax個のノードからなる連続した線分をPP3Dラインデータに転送します。
ラインデータはaddLineを一回呼び出す毎に線分が一本ずつ追加されます。
BASICの実行開始前に読み込まれていたラインデータは実行開始時も保持され続けますので、全データをクリアするには初めにclearLineListを呼び出す必要があります。
addLineではsetVertと同様に物理量またはノード色直接指定により色をつける事が出来ます。
addLine2で与えた物理量は、pressureとして認識されます。

 

#-----------------------------addLine1サンプルコード
#-----------------------------結果


3Dオブジェクトの回転:rot_x, rot_y, rot_z, rot_xdef, rot_ydef, rot_zdef, rot_set_default

スクリーン座標系基準
rot_x(dthi), rot_y(dthi), rot_z(dthi)

オブジェクト座標系基準
rot_xdef(dthi), rot_ydef(dthi), rot_zdef(dthi)
dthi:角度の増分[deg]

角度を初期状態に戻す
rot_set_default


ノード、ラインデータやメッシュデータなどの3次元オブジェクトを回転させます。
回転角はコントロールパネルのRotateBoxと連動します。
BASICの実行開始前に設定されていた角度は実行開始時も保持され続けますので、角度を初期状態に戻すには初めにrot_set_defaultを呼び出してください。

#-----------------------------rot_xサンプルコード
#-----------------------------結果


3次元オブジェクトの回転:rot_x, rot_y, rot_z, rot_xdef, rot_ydef, rot_zdef, rot_set_default

スクリーン座標系基準
rot_x(dthi), rot_y(dthi), rot_z(dthi)

オブジェクト座標系基準
rot_xdef(dthi), rot_ydef(dthi), rot_zdef(dthi)
dthi:角度の増分[deg]

角度を初期状態に戻す
rot_set_default


ノード、ラインデータやメッシュデータなどの3次元オブジェクトを回転させます。
回転角はコントロールパネルのRotateBoxと連動します。
BASICの実行開始前に設定されていた角度は実行開始時も保持され続けますので、角度を初期状態に戻すには初めにrot_set_defaultを呼び出してください。

#-----------------------------サンプルコード
#-----------------------------結果


3次元オブジェクトの拡大、縮小:zoom_by_default, zoom_by_present, zoom_set_default

初期状態を基準に拡大/縮小
zoom_by_default(z)

現在の倍率を基準に拡大/縮小
zoom_by_present(z)
z:倍率(0以上)

倍率を初期状態に戻す
zoom_set_default


3次元オブジェクトの倍率を変更します。
BASICの実行開始前に設定されていた倍率は実行開始時も保持され続けますので、倍率を初期状態に戻すには初めにzoom_set_defaultを呼び出してください。

#-----------------------------サンプルコード
#-----------------------------結果


3次元オブジェクトの移動:moov_x, moov_y, moov_x_set_default, moov_y_set_default

moov_x(x), moov_y(y)

3次元オブジェクトを移動します。
BASICの実行開始前に設定されていた移動量は実行開始時も保持され続けますので、移動量を初期状態に戻すには初めにmoov_x_set_default, moov_y_set_defaultを呼び出してください。

#-----------------------------サンプルコード
#-----------------------------結果


3次元オブジェクトの消去:claer3DDatas

claer3DDatas

ノード、ラインデータやメッシュデータなどの3次元オブジェクトを消去します。


rotateBoxを使用した配列変数の座標変換:rotateNodes

rotateNodes(n,x,y,z)
n:座標変換するノード数
x:x座標(一次元配列変数)
y:y座標(一次元配列変数)
z:z座標(一次元配列変数)

一次元配列変数x,y,zをrotateBoxの回転角を使用して座標変換します。

#-----------------------------サンプルコード
#-----------------------------結果