From: David and Sharon Phillips Date: 2008-06-16T07:42:53+09:00 Subject: Re: [QUIZ] Circle Drawing (#166) 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 # http://pastie.org/214895 # # 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