Help us understand the problem. What is going on with this article?

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

きっかけ

子供の宿題を見てて急に複素数の復習をしたくなりました
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

rakuten
楽天グループは、「イノベーションを通じて、人々と社会をエンパワーメントする」ことをミッションとしています。ユーザーや取引先企業へ満足度の高いサービスを提供するとともに、多くの人々の成長を後押しすることで、社会を変革し豊かにしていきます。「グローバル イノベーション カンパニー」であり続けるというビジョンのもと、企業価値・株主価値の最大化を図ってまいります。
https://corp.rakuten.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away