デジタル時計でなく、アナログ時計を作ります。
ソースです。
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θ) で求めることができます。