デジタル時計でなく、アナログ時計を作ります。
ソースです。
public class MyTokeiAnalog extends MyTokei {
// 秒針
public double getRadSec() {
return Math.toRadians(90 - sec * 6);
}
// 長針
public double getRadMin() {
return Math.toRadians(90 - min * 6 - sec / 10);
}
// 短針
public double getRadHour() {
return Math.toRadians(90 - hour * 30 - min / 2);
}
}
アナログ時計クラスを作成します。 これは、MyTokeiクラスを継承します。 アナログですから針を考えます。 座標平面は MyPoint クラスを使って次のようにします。
①原点は画面中央 ②x軸は右方向 ③y軸は上方向
これで、針の中心は原点となります。 針は、0°のときはx軸上にあり、角度が増えると左に回ります。 時計と反対回りになります。 ですから、12時方向からスタートさせるには、90°からはじめ、後は減らしていきます。 では、針の位置を求めるメソッドを作ります。 これは、回転角だけを求めるメソッドです。
60秒で360°回転します。 ですから、1秒あたり6°回転します。 ただし、返す値は radian にします。
// 秒針
public double getRadSec() {
return Math.toRadians(90 - sec * 6);
}
60分で360°回転します。ですから、1分あたり6°回転させます。 また、60秒で6°ですから、10秒で1°回転させます。
// 長針
public double getRadMin() {
return Math.toRadians(90 - min * 6 - sec / 10);
}
12時間で360°回転します。ですから、1時間あたり30°回転させます。 また、60分で30°ですから、2分で1°回転させます。
// 短針
public double getRadHour() {
return Math.toRadians(90 - hour * 30 - min / 2);
}
これで、回転角はOKです。 針の先の位置ですが、これは、(cosθ, sinθ) で求めることができます。