

少しアドバイスいただければ幸いです。

下記の実装はSwiftですが、どんな言語でも構いません。

アナログ時計の時針で角度を与えたら12時から11時までの正しい時間を割り出してくれる実装をしているのですが、（例えば、角度0度を与えたら12という数字帰ってくるようにしたいです）いまいち綺麗な書き方が思い当たりません。今現、一番良さげだと思っているのは、下記のようなディクショナリーで角度と時間を辞書にして角度を与えたら時間が取れるというものです。

[code]

    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]!)時だよ！")
    }
    
[/code]

理想的には、関数にして、引数で角度であるintを受け取ったら、ごにょごにょ計算した結果、時間がでるという形にしたいです。今は時針なので上記の実装でもなんとかなりますが、分針や秒針になった時に、困らないようにしたいです。


CC BY-SA 3.0
2017-05-21T03:25:27.523
34883
2017-05-21T23:33:31.510
23264
question
javascript php java swift3
アナログ時計の実装で角度を与えたら時間を算出したい


時針の場合１度が２分なので、Math.floor(角度×２/６０)時(角度×２%６０)分（０の時だけ特別扱い）でいいので‌​は？

例えばjavascriptでこんな感じ

[code]

    function func(v){
      var m = v * 2;
      result.value = m ? fill_zero(Math.floor(m / 60), 2) + ":" + fill_zero(m % 60, 2) : "12:00";
    }
    function fill_zero(v, len){
      v += "";
      while(v.length < len)
        v = "0" + v;
      return v;
    }
[/code]

[code]

    <input type="number" value="0" step="1" min="0" max="359" id="degree" name="degree" onchange="func(this.value)">
    <input type="time" value="12:00" id="result" name="result" readonly>
[/code]


CC BY-SA 3.0
2017-05-21T04:33:56.117
34886
2017-05-21T04:33:56.117
5044
34883
answer


時針の場合、1時間は30度なので  
hour = angleH/30  
/*ただし12時は0時と表示されます。  
0時ではなく12時で表示したい場合はprint前に  
if hour == 0 {  
hour = 12  
}  
を追加すれば良いでしょう。  
*/

長針と短針の場合は1分、1秒が6度に相当するので  
min = angleM/6  
sec = angleS/6  
で良いです。


CC BY-SA 3.0
2017-05-21T13:19:26.390
34901
2017-05-21T23:33:31.510
2017-05-21T23:33:31.510
23008
23008
34883
answer