[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

"Programming Ruby", ed. 2, P747. Script generated different image to book's example

John Maclean

1/15/2006 3:08:00 PM

Chaps,

Please find below a script taken from "Programming Ruby", ed. 2, P747. Its intention is to "show off" the abilities of Tk and widgets. The script works but generates a different image to that shown in the book. What results do you guys have? I would be interested to know.

#!/usr/bin/ruby
require 'tk'
include Math

TkRoot.new do |root|
title "Curves"
geometry "400x400"
TkCanvas.new(root) do |canvas|
width 400
height 400
pack('side' => 'top' , 'fill' => 'both' , 'expand' => 'yes' )
points = [ ]
10.upto(30) do |scale|
(0.0).step(2*PI,0.1) do |i|
new_x = 5*scale*sin(i) + 200 + scale*sin(i*2)
new_y = 5*scale*cos(i) + 200 + scale*cos(i*6)
points << [ new_x, new_y ]
f = scale/5.0
r = (Math.sin(f)+1)*127.0
g = (Math.cos(2*f)+1)*127.0
b = (Math.sin(3*f)+1)*127.0

col = sprintf("#%02x%02x%02x", r.to_i, g.to_i, b.to_i)
if points.size ==3
TkcLine.new(canvas,
points[0],[0], points[0],[1],
points[1],[0], points[1],[1],
points[2],[0], points[2],[1],
'smooth' => 'on',
'width' => 7,
'fill' => col,
'capstyle' => 'round')
points.shift
end
end
end
end
end
Tk.mainloop

#errors generated
jayeola@tp20$ /usr/lib/ruby/1.8/tk.rb:2313: warning: redefine encoding=
/usr/lib/ruby/1.8/tk.rb:2316: warning: redefine encoding

--
John Maclean
MSc (DIC)
07739 171 531



8 Answers

Tool69

1/15/2006 3:17:00 PM

0

Works fine for me, but the resulting drawing is very ugly.

David Vallner

1/15/2006 4:22:00 PM

0

On Sun, 15 Jan 2006 16:08:15 +0100, John Maclean <info@jayeola.org> wrote:

> Chaps,
>
> Please find below a script taken from "Programming Ruby", ed. 2, P747.
> Its intention is to "show off" the abilities of Tk and widgets. The
> script works but generates a different image to that shown in the book.
> What results do you guys have? I would be interested to know.
>
> #!/usr/bin/ruby
> require 'tk'
> include Math
>
> TkRoot.new do |root|
> title "Curves"
> geometry "400x400"
> TkCanvas.new(root) do |canvas|
> width 400
> height 400
> pack('side' => 'top' , 'fill' => 'both' , 'expand' => 'yes' )
> points = [ ]
> 10.upto(30) do |scale|
> (0.0).step(2*PI,0.1) do |i|
> new_x = 5*scale*sin(i) + 200 + scale*sin(i*2)
> new_y = 5*scale*cos(i) + 200 + scale*cos(i*6)
> points << [ new_x, new_y ]
> f = scale/5.0
> r = (Math.sin(f)+1)*127.0
> g = (Math.cos(2*f)+1)*127.0
> b = (Math.sin(3*f)+1)*127.0
>
> col = sprintf("#%02x%02x%02x", r.to_i, g.to_i, b.to_i)
> if points.size ==3
> TkcLine.new(canvas,
> points[0],[0], points[0],[1],
> points[1],[0], points[1],[1],
> points[2],[0], points[2],[1],
> 'smooth' => 'on',
> 'width' => 7,
> 'fill' => col,
> 'capstyle' => 'round')
> points.shift
> end
> end
> end
> end
> end
> Tk.mainloop
>
> #errors generated
> jayeola@tp20$ /usr/lib/ruby/1.8/tk.rb:2313: warning: redefine encoding=
> /usr/lib/ruby/1.8/tk.rb:2316: warning: redefine encoding
>


Something must have goofed up between your and my version of the book, on
whichever version of ruby and tcl/tk that comes with Cygwin updated a week
ago, what you posted does indeed generate something strange, however no
errors.

Then I pasted the code from the PDF, version 2004-9-30, page 754 in the
file, 726 in the book, I got the same image as in the book.

I'll go diff the two codes now.

David Vallner


David Vallner

1/15/2006 4:33:00 PM

0

On Sun, 15 Jan 2006 17:22:17 +0100, David Vallner <david@vallner.net>
wrote:

> On Sun, 15 Jan 2006 16:08:15 +0100, John Maclean <info@jayeola.org>
> wrote:
>
>> Chaps,
>>
>> Please find below a script taken from "Programming Ruby", ed. 2, P747.
>> Its intention is to "show off" the abilities of Tk and widgets. The
>> script works but generates a different image to that shown in the book
>> What results do you guys have? I would be interested to know.
>>
>> #!/usr/bin/ruby
>> require 'tk'
>> include Math
>>
>> TkRoot.new do |root|
>> title "Curves"
>> geometry "400x400"
>> TkCanvas.new(root) do |canvas|
>> width 400
>> height 400
>> pack('side' => 'top' , 'fill' => 'both' , 'expand' => 'yes' )
>> points = [ ]
>> 10.upto(30) do |scale|
>> (0.0).step(2*PI,0.1) do |i|
>> new_x = 5*scale*sin(i) + 200 + scale*sin(i*2)
>> new_y = 5*scale*cos(i) + 200 + scale*cos(i*6)
>> points << [ new_x, new_y ]
>> f = scale/5.0
>> r = (Math.sin(f)+1)*127.0
>> g = (Math.cos(2*f)+1)*127.0
>> b = (Math.sin(3*f)+1)*127.0
>>
>> col = sprintf("#%02x%02x%02x", r.to_i, g.to_i, b.to_i)
>> if points.size ==3
>> TkcLine.new(canvas,
>> points[0],[0], points[0],[1],
>> points[1],[0], points[1],[1],
>> points[2],[0], points[2],[1],
>> 'smooth' => 'on',
>> 'width' => 7,
>> 'fill' => col,
>> 'capstyle' => 'round')
>> points.shift
>> end
>> end
>> end
>> end
>> end
>> Tk.mainloop
>>
>> #errors generated
>> jayeola@tp20$ /usr/lib/ruby/1.8/tk.rb:2313: warning: redefine encoding=
>> /usr/lib/ruby/1.8/tk.rb:2316: warning: redefine encoding
>>
>
>
> Something must have goofed up between your and my version of the book,
> on whichever version of ruby and tcl/tk that comes with Cygwin updated a
> week ago, what you posted does indeed generate something strange,
> however no errors.
>
> Then I pasted the code from the PDF, version 2004-9-30, page 754 in the
> file, 726 in the book, I got the same image as in the book.
>
> I'll go diff the two codes now.
>
> David Vallner
>


Diff results after tweaking all the whitespace differences between the two
files (the first is the PDF version, the second the code you posted):

2a3
>
23,25c24,26
< points[0][0], points[0][1],
< points[1][0], points[1][1],
< points[2][0], points[2][1],
---
> points[0],[0], points[0],[1],
> points[1],[0], points[1],[1],
> points[2],[0], points[2],[1],

*coughs*
I rest my case.

David Vallner


Hidetoshi NAGAI

1/15/2006 5:02:00 PM

0

David Vallner

1/15/2006 5:21:00 PM

0

On Sun, 15 Jan 2006 18:02:20 +0100, Hidetoshi NAGAI
<nagai@ai.kyutech.ac.jp> wrote:

>
> [snip]
>
>> >> TkcLine.new(canvas,
>> >> points[0],[0], points[0],[1],
>> >> points[1],[0], points[1],[1],
>> >> points[2],[0], points[2],[1],
>> >> 'smooth' => 'on',
>> >> 'width' => 7,
>> >> 'fill' => col,
>> >> 'capstyle' => 'round')
>
> On current Ruby/Tk, a canvas Item can accept an array or arrays
> as its coords.
> That is, all of the followings are valid.
> ----------------------------------------------------------------
> (0) TkcLine.new(canvas,
> points[0][0], points[0][1],
> points[1][0], points[1][1],
> points[2][0], points[2][1],
> :smooth=>'on', :width =>7, :fill=>col,
> :capstyle=>'round')
>
> (1) TkcLine.new(canvas,
> points[0], points[1], points[2],
> :smooth=>'on', :width =>7, :fill=>col,
> :capstyle=>'round')
>
> (2) TkcLine.new(canvas,
> points.flatten,
> :smooth=>'on', :width =>7, :fill=>col,
> :capstyle=>'round')
>
> (3) TkcLine.new(canvas,
> points,
> :smooth=>'on', :width =>7, :fill=>col,
> :capstyle=>'round')
> ----------------------------------------------------------------


The bug was passing in literal arrays with one element, 0, or 1, to
TkcLine::new. Using the whole 2D array at once looks nifty, it would
indeed prevent that typo / slip of mind.

David Vallner


Dave Thomas

1/16/2006 8:30:00 PM

0


On Jan 15, 2006, at 11:21 AM, David Vallner wrote:

> The bug was passing in literal arrays with one element, 0, or 1, to
> TkcLine::new. Using the whole 2D array at once looks nifty, it
> would indeed prevent that typo / slip of mind.


So, (he says, coming to the discussion late), what does this mean for
the code i the book?


Cheers


Dave


David Vallner

1/16/2006 8:59:00 PM

0

On Mon, 16 Jan 2006 21:29:55 +0100, Dave Thomas <dave@pragprog.com> wrote:

>
> On Jan 15, 2006, at 11:21 AM, David Vallner wrote:
>
>> The bug was passing in literal arrays with one element, 0, or 1, to
>> TkcLine::new. Using the whole 2D array at once looks nifty, it would
>> indeed prevent that typo / slip of mind.
>
>
> So, (he says, coming to the discussion late), what does this mean for
> the code i the book?
>
>
> Cheers
>
>
> Dave
>


The code is fine, for a code example explicitness seems more important to
me instead of showing off - that's for the Ruby/Tk documentation to
explain.

I suspect John McLean has a printed version of the book and made a blooper
typing it into the computer.

David Vallner


Dave Thomas

1/17/2006 2:04:00 AM

0


On Jan 16, 2006, at 2:58 PM, David Vallner wrote:

> The code is fine, for a code example explicitness seems more
> important to me instead of showing off - that's for the Ruby/Tk
> documentation to explain.

/me sighs happily

Thanks