--[[ Complex Number Polar Coordinates Representation Module H. Conrad Cunningham, Professor Computer and Information Science University of Mississippi Developed for CSci 658, Software Language Engineering, Fall 2013 1234567890123456789012345678901234567890123456789012345678901234567890 2013-09-22: Separated out Polar Representation module This module represents complex numbers in polar coordinates using Lua record-style table. --]] -- Load complex number utilities module local util = require "complexUtilities" -- local definitions for convenience local square = util.square local show_data = util.show_data -- SICP Section 2.4.1: Representations for Complex Numbers -- Polar representation (character Alyssa in SICP) -- Uses table { mag = magnitude, ang = angle } local POLAR = "Polar" local function magnitude(z) return z.mag end local function angle(z) return z.ang end local function real_part(z) return magnitude(z) * math.cos(angle(z)) end local function imag_part(z) return magnitude(z) * math.sin(angle(z)) end local function make_from_real_imag(x,y) return { mag = math.sqrt(square(x) + square(y)), ang = math.atan2(y,x) } end local function make_from_mag_ang(r,a) return { mag = r, ang = a } end -- Added function: Convert representation to string local function to_string(z) return POLAR .. "(" .. tostring(magnitude(z)) .. ", " .. tostring(angle(z)) .. ")" end -- Module Export return { make_from_real_imag = make_from_real_imag, make_from_mag_ang = make_from_mag_ang, real_part = real_part, imag_part = imag_part, magnitude = magnitude, angle = angle, to_string = to_string }