3dayboy

技術備忘録

Java + Gradle + Processing + ND4J で GUIシミュレータを作ってみた

Processing と ND4J を使って,強力なベクトル計算機能を備えたGUIシミュレータを作る.

IntelliJ等の特定のIDEの機能に頼らず,Gradleを用いて直接プロジェクトを作成する.

Processing とは

Java をベースに作られた,ビジュアルアートのための言語. 初心者でも簡単にコーディングできるため,プログラミングやコンピュータグラフィックスの入門教材としてもよく使われる.

ND4J とは

Java などの JVM 系言語の上で動作するオープンソース線形代数ライブラリ. JVM 系言語用の深層学習ライブラリ Deeplearning4j (DL4J) を開発した Adam Gibson らによって開発された. Python の科学技術計算ライブラリである NumPy に似ている.

環境

  • Java 8 (Open JDK 1.8.0)
  • Gradle 5.6.1

プロジェクトの新規作成

まずは,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 のライブラリを利用するには,次のパッケージを導入する必要がある:

これらのパッケージを利用するために, 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

 

結果

ウィンドウが出現し,円が左から右に流れるアニメーションが再生される.

おわりに

作成済みソースコードGitHubを参照.

参考