
AVS/Express Support Module in Main library
AVS5では、Fieldデータの演算を行う場合に field mathモジュールを使用していました。
しかし、field math には以下のような制限がありました。
また、AVS5には「Fieldデータの座標値に対して演算が行えるモジュールがない」 という問題がありました。
AVS/Expressではこれらの問題に対応した data math, coordinate mathモジュールが用意されています。
data mathモジュールは、Fieldデータの値(node)を計算するモジュールです。
以下の特徴があります。
行える演算は以下の通りです。
| +, -, *, / | 四則演算 |
| % | 剰余 |
| &, |, ^ | ビットに関するAND, OR, XOR |
| &&, || | 論理的AND, OR |
| ~ | 補数 |
| ==, != | 等号, 不等号 |
| <, > | 未満, より大きい |
| <=, >= | 以下, 以上 |
| and(), or(), xor() | 論理的AND, OR, XOR |
| abs() | 絶対値 |
| add(), sub(), multiply(),divide() | 四則演算 |
| modulo() | 剰余 |
| sqrt() | 平方根 |
| exp(x) | e(オイラー定数)のx乗 |
| pow(x,y) | xのy乗 |
| log() | 自然対数 |
| log10() | 常用対数 |
| sin(),cos(),tan() | 三角関数 |
| asin(),acos(),atan() | 逆三角関数 |
| sinh(),cosh(),tanh() | 双曲線関数 |
| rand() | 乱数 |
サンプルのネットワークと可視化例を挙げます。
計算空間が一次元で配列の数が 100、0.0 ~ 2πの連続した数値をデータとして格納しているFieldデータを用意します。
ネットワークエディタ上にライブラリ Standard_Objects -> Parameters にある float と int オブジェクトを配置します。
float オブジェクトのプロパティ・エディタを表示し、 "All Properties"リストから dimensions を選択します。 追加ボタンを押すと"Current Properties"リストに追加されます。
値を[]に変更し、設定ボタンを押して確定します。 了解ボタンを押してfloatオブジェクトのプロパティ・エディタを閉じます。
同様に、intオブジェクトにも dimensions を設定します。 intオブジェクトの dimensions には、[1](デフォルト)を設定します。
floatオブジェクトを開き、以下のように設定します。 配列型のオブジェクトに値を入力した場合は、Ctrlキーを押しながらリターンキーで確定します。

intオブジェクトには、以下のように設定します。

この配列データから Fieldデータを生成します。
今回は簡単にFieldデータを作成するために、 uniform_scalar_fieldモジュールを使用します。
ライブラリ Accessories -> Field Mappers -> Field Mappers にある uniform_scalar_fieldをワークスペースに配置し、以下のようなネットワークを作成します。

data math のコントロールパネルにあるタイプイン領域に下記の演算式を記述します。
sin(#1)
(注) #1 は一番左の入力ポートに接続されたFieldデータを現します。
入力ポートは全部で4つあるので #1~ #4 まで4つのFieldデータを扱う演算が行えます。
例)ベクトルの大きさを求める
sqrt(pow(#1,2) + pow(#2,2) + pow(#3,2))
これでsinカーブのグラフが現れます。

さらに data math を追加し、以下のようなネットワークを作成します。

追加した data math#1 のコントロールパネルにあるタイプイン領域に 以下の演算をタイプインすると、 条件を満たす時に1が、満たさない時には0が入ったFieldデータが出力されます。
(-2 > (sin(#1)*4)) || ((sin(#1)*4) > 2)

coordinate mathモジュールは、Fieldデータの座標データを計算するモジュールです。
以下の特徴があります。
行える演算は data math と同じです。
入力された座標値を現す場合には、#1~#4 の後に x, y, z を続けて表記します。
例えば、一番左に入力された Fieldデータの x座標を現す場合には #1x と表記します。
例)曲座標形式の座標データをデカルト座標系に変換する
X : #1x*cos(#1y)
Y : #1x*sin(#1y)
coordinate math モジュールを用いて少し変った可視化をおこなってみました。
下図は、二次元FieldデータのZ座標値をずらして複数の可視化結果を 1つのウインドウ内に重ねて表示しています。


各モジュールのパラメーターを以下のように設定すると可視化例のように表示できます。
| モジュール名 | パラメーター名 | 設定値 |
|---|---|---|
| coordinate math | output nspace | 3 |
| X | #1x | |
| Y | #y | |
| Z | 25 | |
| coordinate math#1 | output nspace | 3 |
| X | #1x | |
| Y | #1y | |
| Z | 40 | |
| orthoslice | axis | 2 |
| plane | 32 | |
| surf plot | input nspace | 2 |
| scale | 0.05 | |
| offset | 0 | |
| isoline | number of contours | 17 |
| min level | 0 | |
| max level | 255 |
AVS5では新たにモジュールを自作する必要があるような計算も、AVS/Expressでは標準モジュールで実行できるようになりました。
座標値の演算はAVS/Expressで新たに追加された機能ですが、要望の多かった機能ではないかと思います。 可視化の前に座標変換が必要であるデータであっても、元のデータのままFieldデータとして読み込んだ後、座標変換することができます。
data math, coordinate mathモジュールを利用することで、AVSでの可視化の幅が更に広がるでしょう。
AVS Support Center, fns-avssup@cs.jp.fujitsu.com