松江市 中学生Ruby教室でも使われたR2Dを使って、リサージュ図形をアニメーションしてみました。
R2Dを使うと手軽に視覚化できるので楽しいですね。
以下は、をを0度から30度刻みで360度までアニメーションするスクリプトです。学生時代に行ったオシロスコープの実験を思い出しました。
# -*- coding: utf-8 -*- require 'r2d' include Math w = window class Numeric def to_rad self*PI/180 end end alpha = 0 exp = ->(deg, alpha) { # (x, y) = (cosθ, sin(2θ+α)) [cos(deg.to_rad)*200+w.w/2, -sin(2*deg.to_rad+alpha.to_rad)*200+w.h/2] } update do Rectangle.new(0, 0, w.w, w.h, 'black') Text.new(10, 10, 30, "α = #{alpha}", 'green') x1, y1 = exp.call(0, alpha) 5.step(360, 5) {|deg| x2, y2 = exp.call(deg, alpha) Line.new(x1, y1, x2, y2, 2, "red") x1, y1 = x2, y2 } alpha >= 330 ? alpha = 0 : alpha += 30 end window :show