On 10/16/2012 12:02 PM, Michael Wilber wrote:
Does surface3d and isosurface3d from racket/plot do what you want?

file:///usr/share/racket/doc/plot/renderer3d.html?q=isosurface#(def._((lib._plot/main..rkt)._isosurface3d))

In particular:

#lang racket

(require plot)

(define (f x y)
  (+ 2 (* 2 x) (* 5 y) (* 1/2 x y y) (* 6 x x)))

(plot3d (surface3d f -1 1 -1 1))
(plot3d (contour-intervals3d f -1 1 -1 1 #:label "f(x,y)"))

(define (g x y z)
  (+ (* x y) (* y z) (* z x)))

(define c 0.25)

(plot3d (isosurface3d g c -1 1 -1 1 -1 1))
(plot3d (isosurfaces3d g -1 1 -1 1 -1 1 #:label "g(x,y,z)"))


Isosurfaces are visualized using marching cubes, whose patent finally ran out a few years ago.

Gregory Woodhouse <[email protected]> writes:
I'm intrigued. I suppose pattern based macros could be used to implement
>> operations like + and * [...]

I was thinking more generics. Generic `+' and `*' could evaluate polynomials at runtime, and generic `syntax+' and `syntax*' could emit code that does the same.

and passing to the field of quotients should  formally be no different
>> from rational arithmetic.

Exactly. Reducing polynomial fractions in a generic way might be tricky, but it looks fun. :)

Are you interested in  Chebyshev polynomials for a particular reason
>> (e.g, applications to differential equations) or as part of a more
>> general mathematics library?

Both. Chebyshev polynomials have some nice properties when used to approximate non-polynomials; in particular, they're really close to minimax-error approximations. `math/special-functions' already uses a private Chebyshev polynomial implementation extensively. For many R->R functions, I only have to chop up their domains and plonk a Chebyshev approximation down for each piece.

Chebyshev and other orthogonal polynomial bases come up repeatedly in solutions to differential equations. Multidimensional polynomials can be represented by sparse polynomials over other polynomial rings. When I considered making the private polynomial API public, I studied up on these things a bit, and realized it would be cleaner, more likely correct, and more generally useful if I parameterized polynomials over arbitrary rings and bases.

>> What would be interesting is yo have s nice way of representing
>> algebraic structures in Racket so that standard constructs like
algebraic extensions such as Q(i) don't have to be strongly coupled
>> with the definition of the base ring/field. Maybe I'm asking for
>> functors (in the mathematical sense) and categories.

That's exactly what I need. I had been thinking I'd wait until generics found their way into Typed Racket. But I might try defining them untyped (where generics work right now) and importing them using `require/typed'. I have no idea whether it will work. :D

Neil ⊥

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to