< Summary

Class:Coordinates2
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Utils/Coordinates.cs
Covered lines:10
Uncovered lines:6
Coverable lines:16
Total lines:92
Line coverage:62.5% (10 of 16)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:4
Method coverage:50% (2 of 4)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ConvertCartesianToPolar(...)0%110100%
ConvertCartesianToPolar(...)0%2100%
ConvertPolarToCartesian(...)0%110100%
ConvertPolarToCartesian(...)0%2100%

File(s)

/github/workspace/Assets/Scripts/Utils/Coordinates.cs

#LineLine coverage
 1using UnityEngine;
 2
 3// Utility functions for 2D coordinates.
 4// In Cartesian coordinates, the x-axis points right, and the y-axis points up. The coordinates are
 5// given by (x, y).
 6// In polar coordinates, the angle is measured in degrees from the x-axis counterclockwise to the
 7// y-axis. The coordinates are given by (r, theta).
 8public static class Coordinates2 {
 39  public static Vector2 ConvertCartesianToPolar(in Vector2 cartesian) {
 310    float r = cartesian.magnitude;
 311    float theta = Mathf.Atan2(cartesian.y, cartesian.x) * Mathf.Rad2Deg;
 312    return new Vector2(r, theta);
 313  }
 014  public static Vector2 ConvertCartesianToPolar(float x, float y) {
 015    return ConvertCartesianToPolar(new Vector2(x, y));
 016  }
 17
 918  public static Vector2 ConvertPolarToCartesian(in Vector2 polar) {
 919    float x = polar.x * Mathf.Cos(polar.y * Mathf.Deg2Rad);
 920    float y = polar.x * Mathf.Sin(polar.y * Mathf.Deg2Rad);
 921    return new Vector2(x, y);
 922  }
 023  public static Vector2 ConvertPolarToCartesian(float r, float theta) {
 024    return ConvertPolarToCartesian(new Vector2(r, theta));
 025  }
 26}
 27
 28// Utility functions for 3D coordinates.
 29// In Cartesian coordinates, the x-axis points right, the y-axis points up, and the z-axis points
 30// forward. The coordinates are given by (x, y, z).
 31// In spherical coordinates, the azimuth is measured in degrees from the z-axis clockwise to the
 32// x-axis, and elevation is measured in degrees from the x-z plane up to the y-axis. The coordinates
 33// are given by (r, azimuth, elevation).
 34// In cylindrical coordinates, the azimuth is measured in degrees from the z-axis clockwise to the
 35// x-axis. The coordinates are given by (r, azimuth, height).
 36public static class Coordinates3 {
 37  public static Vector3 ConvertCartesianToSpherical(in Vector3 cartesian) {
 38    float r = cartesian.magnitude;
 39    float azimuth = Mathf.Atan2(cartesian.x, cartesian.z) * Mathf.Rad2Deg;
 40    float elevation = Mathf.Atan(cartesian.y / Mathf.Sqrt(cartesian.x * cartesian.x +
 41                                                          cartesian.z * cartesian.z)) *
 42                      Mathf.Rad2Deg;
 43    return new Vector3(r, azimuth, elevation);
 44  }
 45  public static Vector3 ConvertCartesianToSpherical(float x, float y, float z) {
 46    return ConvertCartesianToSpherical(new Vector3(x, y, z));
 47  }
 48
 49  public static Vector3 ConvertSphericalToCartesian(in Vector3 spherical) {
 50    float y = spherical.x * Mathf.Sin(spherical.z * Mathf.Deg2Rad);
 51    float x = spherical.x * Mathf.Cos(spherical.z * Mathf.Deg2Rad) *
 52              Mathf.Sin(spherical.y * Mathf.Deg2Rad);
 53    float z = spherical.x * Mathf.Cos(spherical.z * Mathf.Deg2Rad) *
 54              Mathf.Cos(spherical.y * Mathf.Deg2Rad);
 55    return new Vector3(x, y, z);
 56  }
 57  public static Vector3 ConvertSphericalToCartesian(float r, float azimuth, float elevation) {
 58    return ConvertSphericalToCartesian(new Vector3(r, azimuth, elevation));
 59  }
 60
 61  public static Vector3 ConvertCartesianToCylindrical(in Vector3 cartesian) {
 62    float r = Mathf.Sqrt(cartesian.x * cartesian.x + cartesian.z * cartesian.z);
 63    float azimuth = Mathf.Atan2(cartesian.x, cartesian.z) * Mathf.Rad2Deg;
 64    float height = cartesian.y;
 65    return new Vector3(r, azimuth, height);
 66  }
 67  public static Vector3 ConvertCartesianToCylindrical(float x, float y, float z) {
 68    return ConvertCartesianToCylindrical(new Vector3(x, y, z));
 69  }
 70
 71  public static Vector3 ConvertCylindricalToCartesian(in Vector3 cylindrical) {
 72    float y = cylindrical.z;
 73    float x = cylindrical.x * Mathf.Sin(cylindrical.y * Mathf.Deg2Rad);
 74    float z = cylindrical.x * Mathf.Cos(cylindrical.y * Mathf.Deg2Rad);
 75    return new Vector3(x, y, z);
 76  }
 77  public static Vector3 ConvertCylindricalToCartesian(float r, float azimuth, float height) {
 78    return ConvertCylindricalToCartesian(new Vector3(r, azimuth, height));
 79  }
 80
 81  public static Vector3 FromProto(in Simulation.CartesianCoordinates coordinates) {
 82    return new Vector3(coordinates.X, coordinates.Y, coordinates.Z);
 83  }
 84
 85  public static Simulation.CartesianCoordinates ToProto(in Vector3 cartesian) {
 86    return new Simulation.CartesianCoordinates() {
 87      X = cartesian.x,
 88      Y = cartesian.y,
 89      Z = cartesian.z,
 90    };
 91  }
 92}