Java + Gradle + Processing + ND4J で GUIシミュレータを作ってみた
Processing と ND4J を使って,強力なベクトル計算機能を備えたGUIシミュレータを作る.
IntelliJ等の特定のIDEの機能に頼らず,Gradleを用いて直接プロジェクトを作成する.
Processing とは
Java をベースに作られた,ビジュアルアートのための言語. 初心者でも簡単にコーディングできるため,プログラミングやコンピュータグラフィックスの入門教材としてもよく使われる.
ND4J とは
Java などの JVM 系言語の上で動作するオープンソースの線形代数ライブラリ. JVM 系言語用の深層学習ライブラリ Deeplearning4j (DL4J) を開発した Adam Gibson らによって開発された. Python の科学技術計算ライブラリである NumPy に似ている.
環境
プロジェクトの新規作成
まずは,Gradleを用いてプロジェクトを新規作成する. 以下のコマンドを実行し,java プロジェクトの雛形を生成する:
$ mkdir simulator $ cd simulator $ gradle init --type java-application ... Enter selection (default: Groovy) [1..2] [Enter] ... Enter selection (default: JUnit 4) [1..4] [Enter] ... Project name (default: simulator): [Enter] Source package (default: simulator): [Enter] ...
パッケージのインストール
Processing および ND4J のライブラリを利用するには,次のパッケージを導入する必要がある:
- Processing3 https://search.maven.org/artifact/org.processing/core/3.3.7/jar
- ND4J https://search.maven.org/artifact/org.nd4j/nd4j-native-platform/0.9.1/jar
これらのパッケージを利用するために, build.gradle の "dependencies" 内に次の記述を加える:
implementation 'org.processing:core:3.3.7' implementation 'org.nd4j:nd4j-native-platform:0.9.1'
メインプログラムの作成
src/main/java/simulator/App.java を次のように書き換える:
package simulator; import processing.core.*; import org.nd4j.linalg.api.ndarray.INDArray; import org.nd4j.linalg.factory.Nd4j; public class App extends PApplet { private INDArray p; // position private INDArray v; // velocity private int d = 40; // diameter public void settings(){ size(200, 200); } public void setup(){ p = Nd4j.create(new double[] {0, height / 2}); v = Nd4j.create(new double[] {1, 0}); } public void draw(){ background(255); p = p.add(v); if(p.getDouble(0) >= width + d/2){ p.putScalar(0, -d/2); } ellipse(p.getFloat(0), p.getFloat(1), d, d); } public static void main(String args[]){ PApplet.main(new String[] {App.class.getName()}); } }
実行
次のコマンドを実行する:
$ gradle run
結果
ウィンドウが出現し,円が左から右に流れるアニメーションが再生される.