Ruby-Processing でアナログ時計を作ってみました。
clock.rb
# アナログ時計のサンプル
def setup
size 300, 300
end
def draw
background 0
time = Time.now
fill 255
text(sprintf("%d:%d:%d", time.hour, time.min, time.sec), 20, 20)
translate width/2, height/2 # 原点を画面中央にする
stroke(100); fill(100); stroke_weight(1)
line(-width, 0, width, 0) # X 軸
line(0, -height, 0, height) # Y 軸
radius = 100 # 時計の半径
for i in 0..60-1
rad = (90.0 / 15 * i).radians
len = radius - 10
xx = len * cos(rad)
yy = len * sin(rad)
sz = i % 5 == 0 ? 7 : 1
ellipse(xx, -yy, sz, sz) # 秒ごとの丸マーク
end
stroke 255
no_fill
ellipse(0, 0, radius*2, radius*2) # 時計の外枠
# 針の描画関数
draw_hand = ->(weight, len, deg) {
rad = (90 - deg).radians
x = len * cos(rad)
y = len * sin(rad)
stroke_weight(weight)
line(0, 0, x, -y)
}
# 秒針
draw_hand.(1, radius - 10, time.sec * 6)
# 長針(分)
draw_hand.(3, radius - 20, time.min * 6 + 6 * time.sec / 60.0)
# 短針(時)
draw_hand.(5, radius - 50, time.hour * 30 + 30 * time.min / 60.0)
end
コマンドラインから次のように実行します。
$ rp5 run clock.rb