Quick solution. Draws filled circles, corrected for non-square pixels. Can take non-integer x,y and radius.
Here http://pastie.org/214895
or below (not sure how long pastie keeps the content)
Cheers,
Dave
···
#
# Ruby Quiz 166 Circles
# David Phillips
#
# sample output
#
# 0000000000000--|||||||||||||||++++++ !!!!!!!!!!!!!!!!!!!!!!!!!
# 00000000000-----|||||||||||||++++++++ !!!!!!!!!!!!!!!!!!!!!!!
# 0000000000------|||||||||||||+++++++++ \ !!!!!!!!!!!!!!!!!!!!!!!
# 000000000--------|||||||||||++++++\\\\\\\\\\\\\!!!!!!!!!!!!!!!!!!!!!!!
# 000000000----------|||||||++++++\\\\\\\\\\\\\\\\\!!!!!!!!!!!!!!!!!!!!
# 00000000-------------------++++\\\\\\\\\\\\\\\\\\\!!!!!!!!!!!!!!!!!
# 000000000-----------------++++\\\\\\\\\\\\\\\\\\\\\!!!!!!!!!!!!!!!
# 000000-----------------+++\\\\\\\\\\\\\\\\\\\\\\\ !!!!!!!!!
# 0 -----------------+++\\\\\\\\\\\\\\\\\\\\\\\===== !
# ------------- \\\\\\\\\\\\\\\\\\\\\\\\\=======
# XXXX--------- \\\\\\\\\\\\\\\\\\\\\\\=========
# XXXXXXXXXX- \\\\\\\\\\\\\\\\\\\\\\\===========
# XXXXXXXXXXXXX ////\\\\\\\\\\\\\\\\\\\\\\\===========*
# XXXXXXXXXXXXX ////////\\\\\\\\\\\\\\\\\\\\\=============*
# XXXXXXXXXXXXXXX //////////\\\\\\\\\\\\\\\\\\\==============**
# XXXXXXXXXXXXX /////////////\\\\\\\\\\\\\\\=================*
# XXXXXXXXXXXXX //////////////\\\\\\\\\\\\\=================**
# XXXXXXXXX /////////////////// \=======================***
# XXXXXXX ///////////////////// =======================**
# /////////////////// *=====================***
# /////////////////// ***=================*****
# ///////////////// ***===============*****
# /////////////// *****=========*******
# ///////////// ********=**********
# / *************
# *
class Canvas
def initialize aspect_ratio=1.6
@rows= []
@y_multiplier= 1/aspect_ratio
yield self if block_given?
end
def set_pixel x, y, char
x, y = x.round, (@y_multiplier*y).round
(@rows[y]||=[])[x]=char unless (x<0 || y<0)
end
def to_s
@rows.map do |row|
row.nil? ? '' : row.map{|c|c||=' '}.join
end.join("\n")
end
# decided to try a method that doesn't require trig functions
def draw_circle x, y, r, fill_char='#'
(x-r).round.upto((x+r).round) do |col|
(y-r).round.upto(y+r) do |row|
if (col-x)**2+(row-y)**2 <= r**2
set_pixel col, row, fill_char
end
end # row
end # col
end # def
end
canvas= Canvas.new do |c|
%w[! . + * X 0 = / \\ - |].each do |char|
c.draw_circle rand(70), rand(30), 4+rand(10), char
end
end
puts canvas
__________________________________________________________
Sent from Yahoo! Mail.
A Smarter Email http://uk.docs.yahoo.com/nowyoucan.html