足し算と引き算だけで円を描く(1)
原点を中心とする半径r の円にみえる座標を選ぶことを考える。
(r^2 - r ≦) x^2 + y^2 ≦ r^2 + r
を満たす(x, y) を探す。
つまり
a(x, y) = r^2 + r - x^2 - y^2
が0 以上(、2r 以下)となるように(x, y) を探す。
(0, r) から出発したとき、a(x, y) = r である。
yを固定し、xを1増加させ、右に移動することを考える。
このとき、a(x, y) は2x+1 減少する。
右に移動し続け、a(x, y) < 0 となったとき、
y を1減少させ、下へ移動させる。
このとき、a(x, y) は2y-1 増加する。
この作業を繰り返し、
円の8分の1を描き、
あとは対称性を用いて全体を表示させる。
このアルゴリズムを使い、円の一部を描いてみた。
def A(r)
xy = Array.new(r + 1){Array.new(r + 1, '□')}
a, x, y = r, 0, r
while x <= y
xy[x][y], xy[y][x] = '■', '■'
a, x = a - x - x - 1, x + 1
a, y = a + y + y - 1, y - 1 if a < 0
end
xy.each{|i| p i.join}
end
(0..20).each{|i| A(i)}
出力結果
"■"
"□■"
"■■"
"□□■"
"□□■"
"■■□"
"□□□■"
"□□□■"
"□□■□"
"■■□□"
"□□□□■"
"□□□□■"
"□□□□■"
"□□□■□"
"■■■□□"
"□□□□□■"
"□□□□□■"
"□□□□□■"
"□□□□■□"
"□□□■□□"
"■■■□□□"
"□□□□□□■"
"□□□□□□■"
"□□□□□□■"
"□□□□□■□"
"□□□□□■□"
"□□□■■□□"
"■■■□□□□"
"□□□□□□□■"
"□□□□□□□■"
"□□□□□□□■"
"□□□□□□■□"
"□□□□□□■□"
"□□□□□■□□"
"□□□■■□□□"
"■■■□□□□□"
"□□□□□□□□■"
"□□□□□□□□■"
"□□□□□□□□■"
"□□□□□□□■□"
"□□□□□□□■□"
"□□□□□□■□□"
"□□□□□■■□□"
"□□□■■□□□□"
"■■■□□□□□□"
"□□□□□□□□□■"
"□□□□□□□□□■"
"□□□□□□□□□■"
"□□□□□□□□□■"
"□□□□□□□□■□"
"□□□□□□□□■□"
"□□□□□□□■□□"
"□□□□□□■□□□"
"□□□□■■□□□□"
"■■■■□□□□□□"
"□□□□□□□□□□■"
"□□□□□□□□□□■"
"□□□□□□□□□□■"
"□□□□□□□□□□■"
"□□□□□□□□□■□"
"□□□□□□□□□■□"
"□□□□□□□□■□□"
"□□□□□□□■□□□"
"□□□□□□■□□□□"
"□□□□■■□□□□□"
"■■■■□□□□□□□"
"□□□□□□□□□□□■"
"□□□□□□□□□□□■"
"□□□□□□□□□□□■"
"□□□□□□□□□□□■"
"□□□□□□□□□□■□"
"□□□□□□□□□□■□"
"□□□□□□□□□■□□"
"□□□□□□□□□■□□"
"□□□□□□□□■□□□"
"□□□□□□■■□□□□"
"□□□□■■□□□□□□"
"■■■■□□□□□□□□"
"□□□□□□□□□□□□■"
"□□□□□□□□□□□□■"
"□□□□□□□□□□□□■"
"□□□□□□□□□□□□■"
"□□□□□□□□□□□■□"
"□□□□□□□□□□□■□"
"□□□□□□□□□□■□□"
"□□□□□□□□□□■□□"
"□□□□□□□□□■□□□"
"□□□□□□□□■□□□□"
"□□□□□□■■□□□□□"
"□□□□■■□□□□□□□"
"■■■■□□□□□□□□□"
"□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□■"
"□□□□□□□□□□□□■□"
"□□□□□□□□□□□□■□"
"□□□□□□□□□□□□■□"
"□□□□□□□□□□□■□□"
"□□□□□□□□□□■□□□"
"□□□□□□□□□□■□□□"
"□□□□□□□□■■□□□□"
"□□□□□□□■□□□□□□"
"□□□□■■■□□□□□□□"
"■■■■□□□□□□□□□□"
"□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□■□□"
"□□□□□□□□□□□■□□□"
"□□□□□□□□□□■□□□□"
"□□□□□□□□□■□□□□□"
"□□□□□□□■■□□□□□□"
"□□□□■■■□□□□□□□□"
"■■■■□□□□□□□□□□□"
"□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□■□□□□"
"□□□□□□□□□□■□□□□□"
"□□□□□□□□□■□□□□□□"
"□□□□□□□■■□□□□□□□"
"□□□□■■■□□□□□□□□□"
"■■■■□□□□□□□□□□□□"
"□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□□■□□□□"
"□□□□□□□□□□□■□□□□□"
"□□□□□□□□□■■□□□□□□"
"□□□□□□□■■□□□□□□□□"
"□□□□□■■□□□□□□□□□□"
"■■■■■□□□□□□□□□□□□"
"□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□□□■□□□□"
"□□□□□□□□□□□□■□□□□□"
"□□□□□□□□□□□■□□□□□□"
"□□□□□□□□□□■□□□□□□□"
"□□□□□□□□■■□□□□□□□□"
"□□□□□■■■□□□□□□□□□□"
"■■■■■□□□□□□□□□□□□□"
"□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□□□□■□□□□"
"□□□□□□□□□□□□□□■□□□□"
"□□□□□□□□□□□□□■□□□□□"
"□□□□□□□□□□□■■□□□□□□"
"□□□□□□□□□□■□□□□□□□□"
"□□□□□□□□■■□□□□□□□□□"
"□□□□□■■■□□□□□□□□□□□"
"■■■■■□□□□□□□□□□□□□□"
"□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□□□□□■□□□□"
"□□□□□□□□□□□□□□■□□□□□"
"□□□□□□□□□□□□□■□□□□□□"
"□□□□□□□□□□□□■□□□□□□□"
"□□□□□□□□□□■■□□□□□□□□"
"□□□□□□□□■■□□□□□□□□□□"
"□□□□□■■■□□□□□□□□□□□□"
"■■■■■□□□□□□□□□□□□□□□"
"□□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□□■"
"□□□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□□□□■□"
"□□□□□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□□□□□■□□"
"□□□□□□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□□□□□□□■□□□"
"□□□□□□□□□□□□□□□□■□□□□"
"□□□□□□□□□□□□□□□■□□□□□"
"□□□□□□□□□□□□□□■□□□□□□"
"□□□□□□□□□□□□□■□□□□□□□"
"□□□□□□□□□□□□■□□□□□□□□"
"□□□□□□□□□□■■□□□□□□□□□"
"□□□□□□□□■■□□□□□□□□□□□"
"□□□□□■■■□□□□□□□□□□□□□"
"■■■■■□□□□□□□□□□□□□□□□"
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。