2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

人はなぜ「アナログ時計」を作りたくなるのでしょうか?
それは、そこに円や線を描画できるプログラミング言語があるからです!

タートルグラフィックスでアナログ時計を描画する

既に、アナログ時計の作り方は、いろいろなところで紹介しています。
例えば、以下はタートルグラフィックスの機能を使った、アナログ時計の作り方を紹介しています。

そこで、今回は、上記を改良しつつ、タートルグラフィックスを使わないで作ってみましょう。

SIN/COSで時計の盤を描く

アナログ時計作りに欠かせないのが、SIN関数とCOS関数です。
SINとCOSは三角関数です。でも、時計を描画するだけなら、あまり難しいことを考える必要はありません。これを使うと、針の角度に応じた座標を調べることができることが分かればOKです。

まずは、以下のようなアナログ時計の盤を描画してみましょう。

スクリーンショット 2021-12-15 0.03.52.png

上記の盤を描画するのが、以下のプログラムです。

盤を描く.nako3
# 時計のサイズを指定 
CW=300 # サイズ
CX=CW÷2 # 中心点
CY=CW÷2
盤描画。

●盤描画とは
  # 盤背景
  全描画クリア。
  5に線太設定。
  白色に塗色設定。
  黒色に線色設定。
  [CX,CY]へCXの円描画。
  # グリッド線
  長さ=CX×0.99
  12回
    角度=(回数-1)/12×360
    赤色の1を長さと角度で針描画
  ここまで。
ここまで。

●(色のサイズを長さと角度で)針描画
  角度=(角度-90)%360;
  色に線色設定。
  サイズに線太設定。
  X=長さ×COS(角度÷180*PI)
  Y=長さ×SIN(角度÷180*PI)
  [CX,CY]から[X+CX,Y+CY]へ線描画。
ここまで。

時計を完成させる

あとは、1秒おきに針の角度を指定して針描画を呼べば時計の完成です!

アナログ時計.nako3
# 時計のサイズを指定 
CW=400 # サイズ
CX=CW÷2 # 中心点
CY=CW÷2

時計更新。
「時計更新」を1秒毎。

●盤描画とは
  # 盤背景
  全描画クリア。
  1に線太設定。
  白色に塗色設定。
  黒色に線色設定。
  [CX,CY]へCXの円描画。
  # グリッド線
  長さ=CX×0.99
  12回
    角度=(回数-1)/12×360
    灰色の1を長さと角度で針描画
  ここまで。
ここまで。

●(色のサイズを長さと角度で)針描画とは
  角度=(角度-90)%360;
  色に線色設定。
  サイズに線太設定。
  X=長さ×COS(角度÷180*PI)
  Y=長さ×SIN(角度÷180*PI)
 [CX,CY]から[X+CX,Y+CY]へ線描画。
ここまで。

●時計更新とは
  盤描画。
  # 現在時刻を得る
  今を「:」で区切る。
  変数[時,分,秒]=それ
  # 角度計算
  時角度=(時%12)÷12×360+((分/60)×(360÷12))
  分角度=分÷60×360
  秒角度=秒÷60×360
  # 針を描画
  黒色の12を(CX×0.5)と時角度で針描画。# 時
  青色の8を(CX×0.8)と分角度で針描画。# 分
  赤色の4を(CX×0.95)と秒角度で針描画。# 秒
ここまで。

上記をなでしこ貯蔵庫で実行すると、次のような時計が表示されます。

スクリーンショット 2021-12-15 0.16.38.png

こちらですぐに試せます

楽しいですね!
針の描画方法をもう少し工夫すれば豪華な時計になります。

ぜひ、挑戦してみてください!

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?