# Solution Review: Map Polar Points to Cartesian Points

This lesson discusses the solution to the challenge given in the previous lesson.

package main
import (
"bufio"
"fmt"
"math"
"os"
"runtime"
"strconv"
"strings"
)

type polar struct {
radius, Î˜  float64  // greek character!
}

type cartesian struct {
x, y float64
}

const result = "Polar: radius=%.02f angle=%.02f degrees -- Cartesian: x=%.02f y=%.02f\n"

var prompt = "Enter a radius and an angle (in degrees), e.g., 12.5 90, " + "or %s to quit."

func init() {
if runtime.GOOS == "windows" {
prompt = fmt.Sprintf(prompt, "Ctrl+Z, Enter")
} else { // Unix-like
prompt = fmt.Sprintf(prompt, "Ctrl+C")
}
}

func main() {
questions := make(chan polar)
defer close(questions)
}

func createSolver(questions chan polar) chan cartesian {
go func() {
for {
polarCoord := <-questions
Î˜ := polarCoord.Î˜ * math.Pi / 180.0 // degrees to radians
}
}()
}

func interact(questions chan polar, answers chan cartesian) {
fmt.Println(prompt)
for {
if err != nil {
break
}
line = line[:len(line)-1] // chop off newline character
if numbers := strings.Fields(line); len(numbers) == 2 {
polars, err := floatsToStrings(numbers)
if err != nil {
fmt.Fprintln(os.Stderr, "invalid number")
continue
}
questions <- polar{polars[0], polars[1]}
fmt.Printf(result, polars[0], polars[1], coord.x, coord.y)
} else {
fmt.Fprintln(os.Stderr, "invalid input")
}
}
fmt.Println()
}

func floatsToStrings(numbers []string) ([]float64, error) {
var floats []float64
for _, number := range numbers {
if x, err := strconv.ParseFloat(number, 64); err != nil {
return nil, err
} else {
floats = append(floats, x)
}
}
return floats, nil
}

Get hands-on with 1200+ tech skills courses.