LoginSignup
3
0

More than 3 years have passed since last update.

Google Spreadsheetでつくるアナログ時計

Last updated at Posted at 2020-03-08

きっかけ

子供の宿題を見てて急に複素数の復習をしたくなりました
z=r(cos+isin)久々に思い出しました

下準備

Google spread sheetを用意する
下準備.gif

時間から秒,分そして時間を抽出する

時間から秒,分そして時間を抽出する.gif

時間に関しては24時間表記だとアナログ時計としては都合が悪いので
MODします

1メモリ進んだときの角度を計算する

1メモリ進んだときの角度を計算する.gif

秒針、分針は 360/60 = 6°
時針は 360/12 = 30°
ですね

xとy座標をそれぞれ計算する

ここで 高校生のときに勉強した 複素数の極形式を使います
z=r(cos+isin)
rの長さに関しては 秒針は1.2の長さ、分針は1.0の長さ,時針は0.8の長さとしました
こちらを使うと
秒針:90°から時計回りなので一秒進むごとに6°づつ引いていく
分針:90°から時計回りなので一分進むごとに6°づつ引いていくさらに秒針を考慮して更に秒あたり1/60°づつ調整
時針:90°から時計回りなので一時間進むごとに30°づつ引いていくさらに分針を考慮して更に分あたり1/60 °づつ調整

xとy座標をそれぞれ計算する.gif

グラフを作る

グラフを作る.gif

一秒に一回動くようにする

このようなGASスクリプトを用意します
GASのトリガーは一分に一回なのでUtilities.sleepで一秒スリープして
55回/分 更新するようにします
5秒分はバッファです*適当

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  for(var i = 0 ; i < 55 ; i ++){
    var now = new Date();
    sheet.getRange(1,1).setValue(now);
    sheet.setName(now);
    Utilities.sleep(1000);
  }
}

Triggerをセットします

Triggerをセットします.gif

まとめ

極形式をつかうといとも簡単に回転を表現できました。
20数年ぶりに思い出したのであってるか不安です。。
もしツッコミあればコメントいただきますと幸いです。
デモはこちら
https://docs.google.com/spreadsheets/d/10PUmZ9VZY7N9FCOKdaoICyjj8xAPr1Ff-dfPlhPD33s/edit?usp=sharing

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0