I wrote this to Darrin, but didn't CC cafe:

On Mar 17, 2010, at 9:20 PM, Darrin Chandler wrote:

type Cartesian_coord = Float

type Latitude  = Float
type Longitude = Float

data Point      = Cartesian (Cartesian_coord, Cartesian_coord)
                | Spherical (Latitude, Longitude)

type Center = Point
type Radius = Float

data Shape      = Circle Center Radius
                | Polygon [Point]

This obviously stinks since a Polygon could contain mixed Cartesian and
Spherical points. Polygon needs to be one or the other, but not mixed.

My suggestion would be to use an alternate representation of "spherical" points in terms of polar coordinates, and then to normalize and mix at will:

type Theta = Float
type Radius = Float

data Point = Cartesian (Cartesian_coord, Cartesian_coord)
           | Polar   (Theta, Radius)

normalize_point :: Point -> Point
normalize_point Cartesian x y = Cartesian x y
normalize_point Polar t r = Cartesian x y where x = r * cos t; y = r * sin t;

It really depends on what you want to do with your points. If you want to do linear algebra, you might want your points to depend on a basis, for example. But your "spherical" points don't really form a basis in three-space, or even over all of two-space.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to