BiorhythmCanvas.drawMarks()

------------------------------------

メソッドdrawMarks()を見ていきましょう。

前述のdrawCurves()で描いたバイオリズム曲線上にマークを描くメソッドです。簡単のために身体のマークを描く部分を見ていきます。

------------------------------------

得られるバイオリズムの値に応じてマークをカーブ上のどこに表示するか決めてやればあとは簡単です。

どこに表示するか決める方法は色々あると思いますが、ここではサインカーブの一周期を12等分した点上に表示することにし、配列

private int[] physicalValue = {9, 10, 11, 11, 0, 0, 0, 1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8};

を用いて決定しています。例えば得られたバイオリズムの値が0ならば12等分した9番目の点に、1ならば10番目の点に表示するといった具合です。

------------------------------------

前述のdrawLines()ではサインカーブを24等分して描いたので、座標の計算にこれを用いると簡単です。

int physicalPoint = physicalValue[yourBiorhythm.getPhysicalBiorhythm()] * 2;

として12等分した何番目に描くかを2倍して、24等分した何番目に描くかをphysicalPointとして得ます。

続いて

if (physicalImage != null) {
    //physicalImage が設定されている場合はそれを描く。
} else {
    //physicalImage が設定されていない場合は角の丸い四角を描く。
}

と処理を分けています。どちらのケースも似たような処理をしているので、physicalImageが設定されている場合だけを説明します。

g.drawImage(physicalImage,
            gridWidth * physicalPoint + PHYSICAL_ORIGIN_X - physicalImageDimension.width / 2,
            (int)(amplitude * Math.sin((double)(physicalPoint - 18) * Math.PI / 12.0)) + ORIGIN_Y - physicalImageDimension.height / 2,
            this);

physicalImageを描くだけです。x座標の指定ですが、まず

gridWidth * physicalPoint + PHYSICAL_ORIGIN_X

までは前述のdrawCurves()での計算と同じです。イメージの中心がカーブ上の等分した点にくるようにしたいので、ここから

physicalImageDimension.height / 2

を引いています。physicalImageDimensionはイメージの大きさが入るDimension型の変数で、イメージを設定するときに計算されます。y座標の計算も同様です。

以上physicalImageが設定されている場合の身体のマークを描く部分を説明しましたが、他の部分も同様です。

------------------------------------

前の項目へ次の項目へ

「メイキング・オブ・バイオリズム」のページへ