Re: Proposal for 'math.e' (2007-08-07)

new topic     » goto parent     » topic index » view thread      » older message » newer message

Colin Taylor wrote:

> Juergen Luethje wrote:
> > 
> > This is my current (2007-08-07) proposal for a "math.e" standard
> > include file, according to the recent discussion here on EUforum.
> > 
> ...
> > 
> > type point_pol (object x)
> >    if sequence(x) and (length(x) = 2)
> >    and atom(x[1]) and (x[1] >= 0)
> >    and atom(x[2]) then
> >       return 1 
> >    end if
> >    return 0
> > end type
> > 
> > global function polar_to_rect (point_pol p)
> >    -- convert polar coordinates to rectangular coordinates
> >    -- in : sequence of two atoms: {distance, angle};
> >    --      'distance' must be >= 0, 'angle' is in radians 
> >    -- out: sequence of two atoms: {x, y}
> >    atom distance, angle, x, y
> > 
> >    distance = p[1]
> >    angle = p[2]
> >    x = distance*cos(angle)
> >    y = distance*sin(angle)
> >    return {x, y}
> > end function
> > 
> > type point_xy (object x)
> >    if sequence(x) and (length(x) = 2)
> >    and atom(x[1])
> >    and atom(x[2]) then
> >       return 1 
> >    end if
> >    return 0
> > end type
> > 
> > global function rect_to_polar (point_xy p)
> >    -- convert rectangular coordinates to polar coordinates
> >    -- in : sequence of two atoms: {x, y}
> >    -- out: sequence of two elements: {distance, angle}
> >    --      - 'distance' is always an atom >= 0
> >    --      - 'angle' is normally an atom that expresses radians,
> >    --        and is in the half-closed interval ]-PI,+PI].
> >    --        If 'distance' equals 0, then 'angle' is {},
> >    --        meaning that it is undefined in this case.
> >    object angle
> >    atom distance, x, y
> > 
> >    x = p[1]
> >    y = p[2]
> >    distance = sqrt(x*x + y*y)
> >    if x > 0 then
> >       angle = arctan(y/x) 
> >    elsif x < 0 then
> >       if y < 0 then
> >          angle = arctan(y/x) - PI
> >       else
> >          angle = arctan(y/x) + PI
> >       end if
> >    else
> >       if y < 0 then
> >          angle = -HALF_PI
> >       elsif y > 0 then
> >          angle = HALF_PI
> >       else
> >          angle = {}            -- The angle is undefined in this case.
> >       end if
> >    end if
> >    return {distance, angle}
> > end function
> > 
> ...
> >
> > Regards,
> >    Juergen
> 
> Hi Juergen,
> 
> I disagree with your solution to the special case rect_to_polar({0,0}).  By
> setting the undefined angle to {}, you create a situation where the result
> cannot
> be translated back to rectangular coordinates.

Hi Colin,

sorry, I overlooked that.

> You are creating a real problem
> in order to solve what (imho) is an imagined problem.

I think you are right. smile
So I propose that rect_to_polar({0,0}) should return {0,0}.
Do you agree with that?

Regards,
   Juergen

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu