Cartesian Coordinates From Degree Angle in Java


The challenge

Write a simple function that takes polar coordinates (an angle in degrees and a radius) and returns the equivalent cartesian coordinates (rounded to 10 places).

For example:

coordinates(90,1) => (0.0, 1.0)

coordinates(45, 1) => (0.7071067812, 0.7071067812)

The solution in Java code

Option 1:

import java.awt.geom.Point2D;

class CoordinatesInspector {
  Point2D.Double coordinates(Double degrees, Double radius) {
    return new Point2D.Double(
        Math.round(radius * Math.cos(Math.toRadians(degrees)) * 10e9) / 10e9,
        Math.round(radius * Math.sin(Math.toRadians(degrees)) * 10e9) / 10e9);
  }
}

Option 2:

import java.awt.geom.Point2D;
import java.math.*;

public class CoordinatesInspector {

  public Point2D coordinates(Double degrees, Double radius) {
    double rd = Math.toRadians(degrees);
    double x = radius * Math.cos(rd);
    double y = radius * Math.sin(rd);
    BigDecimal xb = new BigDecimal(x).setScale(10, RoundingMode.HALF_UP);
    BigDecimal yb = new BigDecimal(y).setScale(10, RoundingMode.HALF_UP);
    return new Point2D.Double(xb.doubleValue(),yb.doubleValue());
  }

}

Option 3:

import java.awt.geom.Point2D;

public class CoordinatesInspector {

  public static Point2D coordinates(Double degrees, Double radius) {
        var radians = Math.toRadians(degrees);
        return new Point2D.Double(
                Double.parseDouble(String.format("%.10f", radius * Math.cos(radians))),
                Double.parseDouble(String.format("%.10f", radius * Math.sin(radians)))
        );
    }

}

Test cases to validate our solution

import java.awt.geom.Point2D;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class CoordinatesTest {

  @Test public void test_1() {
    Point2D result = new CoordinatesInspector().coordinates(90.0,1.0);
    assertEquals("Incorrect coordinates", new Point2D.Double(0.0,1.0), result);
  }
  
}

Additional test cases

import java.awt.geom.Point2D;
import static org.junit.Assert.*;
import org.junit.Test;

public class CoordinatesTest {
 
  @Test public void test_1() {
    Point2D result = new CoordinatesInspector().coordinates(90.0,1.0);
    assertEquals("Incorrect coordinates", new Point2D.Double(0.0,1.0), result);
  }

  @Test public void test_2() {
    Point2D result = new CoordinatesInspector().coordinates(90.0,2.0);
    assertEquals("Incorrect coordinates", new Point2D.Double(0.0,2.0), result);
  }

  @Test public void test_3() {
    Point2D result = new CoordinatesInspector().coordinates(0.0,1.0);
    assertEquals("Incorrect coordinates", new Point2D.Double(1.0,0.0), result);
  }

  @Test public void test_4() {
    Point2D result = new CoordinatesInspector().coordinates(45.0,1.0);
    assertEquals("Incorrect coordinates", new Point2D.Double(0.7071067812,0.7071067812), result);
  }

  @Test public void test_5() {
    Point2D result = new CoordinatesInspector().coordinates(1090.0,10000.0);
    assertEquals("Incorrect coordinates", new Point2D.Double(9848.0775301221,1736.4817766693), result);
  }

  @Test public void test_6() {
    Point2D result = new CoordinatesInspector().coordinates(-270.0,1.0);
    assertEquals("Incorrect coordinates", new Point2D.Double(0.0,1.0), result);
  }
  
  
}