時計の角度を与えたら時間を割り出してくれるロジックを考える。
時計の角度を与えたら時間を割り出してくれるロジックを考える。
アナログ時計の実装で角度を与えたら時間を算出するプログラムを作ることになりました。具体的には、アナログ時計で12時の時刻の角度は0度もしくは360度になるので 0度もしくは360度を与えたら12時だよ
と教えてくれるようなイメージです。なぜそんなプログラムを組むのか、とあるプロジェクトで必要になったからです。
辞書型を使う
僕がまず最初に考えたのは、ディクショナリーを使うことでした。下記のように角度と時間を辞書にして角度を与えたら時間が取れるというものです。正直、めちゃくちゃ賢くないやり方です。これ、今は時針だから良いですけど、分針や秒針になったらオワコンです。理想的には、関数にして、引数で角度であるintを受け取ったら、ごにょごにょ計算した結果、時間がでるという形にしたいですよね。
func AngleToTime() {
var test = [0:12, 30:1, 60:2, 90:3, 12:4, 150:5, 180:6, 210:7, 240:8, 270:9, 300:10, 330:11]
let testtest = 0
print("今\(test[testtest]!)時だよ!")
}
割り算を使う
0~359の角度を採るとき
0~ 29: 0時台
30~ 59:1時台
60~ 89:2時台
……
330~359:11時台
となるわけですから角度÷30 の「商」が時を表す、はずです。この30は、360÷12 ですね。時針は1周を12分割しているのですから。では分針や秒針の場合は 360 ÷ 60で6と出して角度÷6で分もしくは秒が出せるってことになります。
実装
最終的には、下記のようになりました。辞書を使うことに比べたら本当に綺麗&短い&優秀!な最強のロジックになりました。ていうか、自分がアホすぎですね笑。もっと賢くならねばー!頑張るぞー!
//角度に30を割れば時間が出る
//角度に6を割れば分もしくは秒が出る
var MSvalue = 360
var Hvalue = 360
print("今\(Hvalue / 30)時だよ!")
print("今\(MSvalue / 6)分もしくは秒だよ!")
参考
いやー、本当に色々世の中には賢い人がいるんだなと脱帽です。ありがとうございました。