質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

アナログ時計の実装で角度を与えたら時間を算出したい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,789

keys

score 199

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

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

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

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

アドバイスよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+7

0~359の角度を採るとき、
0~ 29: 0時台
30~ 59:1時台
60~ 89:2時台
……
330~359:11時台

となるわけですから、角度÷30 の「商」が時を表す、はずです。この30は、360÷12 ですね。時針は1周を12分割しているのですから。
では分針や秒針の場合はどうなるかというと、1周360度を60分割しているのですから……あとは類推出来るでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/24 18:36

    非常に分かりやすく頭のよすぎる考え方に感動しました、ありがとうございました。参考にさせていただきます。

    キャンセル

+5

ヒント: 12時間で一周360度回転する

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/21 12:09

    [低評価1] でしたが、適切なアドバイスだと思いましたので、[+1] しました。

    キャンセル

  • 2017/05/21 13:07

    ヒントって書いたからでは?答えそのものだしw

    キャンセル

  • 2017/05/21 21:42

    これが「答えそのもの」ならこんな質問は出てこないはずなのですがね…

    キャンセル

0

答えを書いてしまいます。

int angle2time(int angle){
    int time = angle/30;
    if(time==0)
         time = 12
    return time;
}


です。
追記
12時の処理を忘れてました。
ごめんなさい

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る