On 10/31/2011 10:49 PM, John Clements wrote:
So, I've been plotting the frequency response of chebyshev filters, and I 
decided to try out the 3d plotting of the new plot:

(define chebyshev-fun (poles&zeros->fun chebyshev-poles '()))
(plot3d (surface3d (lambda (x y)
                      (magnitude (chebyshev-fun
                                  (+ x (* i y))))))
         #:x-min -1.0
         #:x-max 1.0
         #:y-min -1.0
         #:y-max 1.0
         #:z-max 100.0)

=>






Which is just absolutely amazing. But then, just on a total whim, I used the 
mouse to... grab and turn it ?!??   JAW DROPS OPEN HERE.

That was quite a shock. A good one!

Color me sold.  I'm just wondering how soon I can show this off to my students.

It'll be in 5.2, which should be released... soon? This month sometime.

If by "show this off to my students" you mean "use it in an HtDP language", it's usable as soon as students get higher-order functions (Intermediate). Except for using keyword arguments. Apparently, the HtDP languages implement them differently. :/

But you don't often need them. For your Chebyshev plot, you could do this instead:

(plot3d (surface3d (lambda (x y)
                     (magnitude (chebyshev-fun
                                 (+ x (* i y)))))
                   -1 1 -1 1))

and it should find a good z-max for you. If it's too large, you can put the #:z-max argument in the call to 'surface3d'. The 'plot' and 'plot3d' functions now know how to fit the plot area to plot elements.

FWIW, your reaction to rotating the plot has pasted a two-hour grin onto my face. :D I was hoping for exactly that when I implemented it.

Neil T
_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to