Ownway.Info
 
HOMEJAVAアプレットでいろいろなことをしようJAVAのグラフライブラリ → シグモイド関数を描画するまで
シグモイド関数を描画するまで

1: シグモイド関数を定義する
Functionクラスを継承してシグモイド関数を定義する

シグモイド関数の定義は知ってるとして話を進めるよ。 シグモイド関数は、ライブラリ内のFunctionクラスを継承して定義するんだ。

import org.prosty.graph2.function.*;

/// シグモイド関数です。
class SigmoidFunction extends Function {
  // ...

  /// 関数値を取得します。
  public double function(double x) throws OutOfRangeException {
    return 1.0/(1.0+Math.exp(-slope_*x));
  }
}

定義はこれだけ。簡単だね。

2: Graph2Canvasクラスを使ってシグモイド関数を描画する
Graph2Canvasインスタンスを生成する

Graph2Canvasクラスが、グラフを描画する要の機能を持っている。 名前を見て解る通り、このクラスはCanvasクラスを継承したクラスなので 他のコンポーネントと同様にコンテナに乗せることができるんだ。 まずはコンテナとなるアプレットを定義して、init関数内でGraph2Canvasインスタンスを生成しよう。

/// ...

import org.prosty.graph2.*;

/// グラフを描画するテスト的なアプレットです。
public class SampleApplet1 extends Applet {
  /// アプレットを初期化します。
  public void init() {
    Graph2Canvas canvas=new Graph2Canvas();

    // ...

    setLayout(new BorderLayout());
    add(canvas, BorderLayout.CENTER);
  }
}
関数をサンプリングする

このグラフライブラリでは、連続な値を持つ関数を扱うことはできない。 そこでAutoSample2クラスを使いサンプリングを行うことで、関数を離散的な値に変換する。

// ...

import org.prosty.graph2.function.*;

/// グラフを描画するテスト的なアプレットです。
public class SampleApplet1 extends Applet {
  /// アプレットを初期化します。
  public void init() {
    Graph2Canvas canvas=new Graph2Canvas();

    FunctionDomain domain=new FunctionDomain(-20.0, 20.0);
    AutoSample2 sample=new AutoSample2(new SigmoidFunction(1.0),
                                       domain,
                                       new LinearRuler(),
                                       100);

    // ...

    setLayout(new BorderLayout());
    add(canvas, BorderLayout.CENTER);
  }
}

上には、シグモイド関数の-20.0−20.0間を等間隔で100点サンプリングしろと書かれている。

Graph2Managerクラスで表示領域を指定する

表示領域を確定するためにGraph2Managerクラスのインスタンスを生成する。

// ...

/// グラフを描画するテスト的なアプレットです。
public class SampleApplet1 extends Applet {
  /// アプレットを初期化します。
  public void init() {
    Graph2Canvas canvas=new Graph2Canvas();

    FunctionDomain domain=new FunctionDomain(-20.0, 20.0);
    AutoSample2 sample=new AutoSample2(new SigmoidFunction(1.0),
                                       domain,
                                       new LinearRuler(),
                                       100);
    Graph2Manager manager=new Graph2Manager(
        new ConstG2CoordCreater(domain, new FunctionImage(0.0, 1.0))
      );
    canvas.add(manager);

    // ...

    setLayout(new BorderLayout());
    add(canvas, BorderLayout.CENTER);
  }
}

上には、 定義域として-20.0−20.0を 値域として0.0−1.0を固定表示領域とすると書いてある。 そして、そのインスタンスをGraph2Canvasインスタンスに追加する。

SimpleLineG2Elementクラスで線要素を追加する

最後に、Graph2Managerクラスで指定した表示領域に線要素を追加すれば、 グラフが表示される。

// ...

/// グラフを描画するテスト的なアプレットです。
public class SampleApplet1 extends Applet {
  /// アプレットを初期化します。
  public void init() {
    Graph2Canvas canvas=new Graph2Canvas();

    FunctionDomain domain=new FunctionDomain(-20.0, 20.0);
    AutoSample2 sample=new AutoSample2(new SigmoidFunction(1.0),
                                       domain,
                                       new LinearRuler(),
                                       100);
    Graph2Manager manager=new Graph2Manager(
        new ConstG2CoordCreater(domain, new FunctionImage(0.0, 1.0))
      );
    canvas.add(manager);
    manager.add(new SimpleLineG2Element(sample));

    setLayout(new BorderLayout());
    add(canvas, BorderLayout.CENTER);
  }
}
シグモイド関数のグラフ (SampleApplet1.java
本来はアプレットがここに挿入されます。アプレットを動作させるために Java をインストールしてください。
3: ScaleG2Elementを使って目盛りを付ける
目盛りを付ける

以上でグラフを描くことができたけど、目盛りが無いとなんだかグラフっぽくない。 そこでScaleG2Elementクラスを使って目盛りを付けることができる。

// ...

/// グラフを描画するテスト的なアプレットです。
public class SampleApplet1 extends Applet {
  /// アプレットを初期化します。
  public void init() {
    Graph2Canvas canvas=new Graph2Canvas();

    FunctionDomain domain=new FunctionDomain(-20.0, 20.0);
    AutoSample2 sample=new AutoSample2(new SigmoidFunction(1.0),
                                       domain,
                                       new LinearRuler(),
                                       100);
    Graph2Manager manager=new Graph2Manager(
        new ConstG2CoordCreater(domain, new FunctionImage(0.0, 1.0))
      );
    canvas.add(manager);
    manager.add(new ScaleG2Element(
      new LinearScaler(), new LinearScaler(), Color.black, Color.lightGray));
    manager.add(new SimpleLineG2Element(sample));

    setLayout(new BorderLayout());
    add(canvas, BorderLayout.CENTER);
  }
}
目盛り付きシグモイド関数のグラフ (SampleApplet2.java
本来はアプレットがここに挿入されます。アプレットを動作させるために Java をインストールしてください。
戻る: JAVAのグラフライブラリ