きっかけ
子供の宿題を見てて急に複素数の復習をしたくなりました
z=r(cos+isin)久々に思い出しました
下準備
時間から秒,分そして時間を抽出する
時間に関しては24時間表記だとアナログ時計としては都合が悪いので
MODします
1メモリ進んだときの角度を計算する
秒針、分針は 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 °づつ調整
グラフを作る
一秒に一回動くようにする
このような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をセットします
まとめ
極形式をつかうといとも簡単に回転を表現できました。
20数年ぶりに思い出したのであってるか不安です。。
もしツッコミあればコメントいただきますと幸いです。
デモはこちら
https://docs.google.com/spreadsheets/d/10PUmZ9VZY7N9FCOKdaoICyjj8xAPr1Ff-dfPlhPD33s/edit?usp=sharing