Práctica: Polares a Cartesianas

Escriba una función p2c que permita pasar de coordenadas Polares a Cartesianas y de Cartesianas a Polares. Las fórmulas de conversión de Polares a Cartesianas son:

x = r*cos(angle); y = rsin($angle)
y de Cartesianas a Polares son
r = sqrt(x*x+y*y); angle = atan2(y,x)

Sigue un ejemplo de uso de algunas funciones matemáticas:

~/Lgroovy/objects$ cat -n maths.groovy 
     1  def radians = Math.PI/4
     2  def degrees = 45
     3   
     4  def d2r = { it*Math.PI/180 }
     5  def r2d = { it*180/Math.PI }
     6   
     7  println "sin(PI/4) = ${Math.sin(radians)}  == sin(45º) = ${Math.sin(d2r(degrees))}"
     8  println "cos(PI/4) = ${Math.cos(radians)}  == cos(45º) = ${Math.cos(d2r(degrees))}"
     9  println "tan(PI/4) = ${Math.tan(radians)}  == tan(45º) = ${Math.tan(d2r(degrees))}"
    10  println "asin(sqrt(2)/2) = ${Math.asin(2**(-0.5))} == asin(sqrt(2)/2)º = ${r2d(Math.asin(2**(-0.5)))}º"
    11  println "acos(sqrt(2)/2) = ${Math.acos(2**(-0.5))} == acos(sqrt(2)/2)º = ${r2d(Math.acos(2**(-0.5)))}º"
    12  println "atan(1) = ${Math.atan(1)} == atan(1)º = ${r2d(Math.atan(1))}º"
Ejecución:
~/Lgroovy/objects$ groovy maths.groovy 
sin(PI/4) = 0.7071067811865475  == sin(45º) = 0.7071067811865475
cos(PI/4) = 0.7071067811865476  == cos(45º) = 0.7071067811865476
tan(PI/4) = 0.9999999999999999  == tan(45º) = 0.9999999999999999
asin(sqrt(2)/2) = 0.7853981633974482 == asin(sqrt(2)/2)º = 44.99999999999999º
acos(sqrt(2)/2) = 0.7853981633974484 == acos(sqrt(2)/2)º = 45.00000000000001º
atan(1) = 0.7853981633974483 == atan(1)º = 45.0º
Utilice argumentos con nombres (x, y, r, angle) para determinar el tipo de conversión requerida. La función retorna a su vez un mapa con el mismo convenio de nombres.

Son ejemplos de llamadas legales:

p2c(x:1, r:1) 
p2c(x:1, y : 0)
p2c(r :1, angle : 0.2)
La función devolverá un mapa con los valores de x, y, r y angle.

Se considerará un error llamar a la función con un número de argumentos distinto de dos.

Casiano Rodríguez León
2010-04-30