< Summary

Class:Coordinates3
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Utils/Coordinates.cs
Covered lines:6
Uncovered lines:36
Coverable lines:42
Total lines:92
Line coverage:14.2% (6 of 42)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:10
Method coverage:20% (2 of 10)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ConvertCartesianToSpherical(...)0%2100%
ConvertCartesianToSpherical(...)0%2100%
ConvertSphericalToCartesian(...)0%2100%
ConvertSphericalToCartesian(...)0%2100%
ConvertCartesianToCylindrical(...)0%2100%
ConvertCartesianToCylindrical(...)0%2100%
ConvertCylindricalToCartesian(...)0%2100%
ConvertCylindricalToCartesian(...)0%2100%
FromProto(...)0%110100%
ToProto(...)0%110100%

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 {
 9  public static Vector2 ConvertCartesianToPolar(in Vector2 cartesian) {
 10    float r = cartesian.magnitude;
 11    float theta = Mathf.Atan2(cartesian.y, cartesian.x) * Mathf.Rad2Deg;
 12    return new Vector2(r, theta);
 13  }
 14  public static Vector2 ConvertCartesianToPolar(float x, float y) {
 15    return ConvertCartesianToPolar(new Vector2(x, y));
 16  }
 17
 18  public static Vector2 ConvertPolarToCartesian(in Vector2 polar) {
 19    float x = polar.x * Mathf.Cos(polar.y * Mathf.Deg2Rad);
 20    float y = polar.x * Mathf.Sin(polar.y * Mathf.Deg2Rad);
 21    return new Vector2(x, y);
 22  }
 23  public static Vector2 ConvertPolarToCartesian(float r, float theta) {
 24    return ConvertPolarToCartesian(new Vector2(r, theta));
 25  }
 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 {
 037  public static Vector3 ConvertCartesianToSpherical(in Vector3 cartesian) {
 038    float r = cartesian.magnitude;
 039    float azimuth = Mathf.Atan2(cartesian.x, cartesian.z) * Mathf.Rad2Deg;
 040    float elevation = Mathf.Atan(cartesian.y / Mathf.Sqrt(cartesian.x * cartesian.x +
 41                                                          cartesian.z * cartesian.z)) *
 42                      Mathf.Rad2Deg;
 043    return new Vector3(r, azimuth, elevation);
 044  }
 045  public static Vector3 ConvertCartesianToSpherical(float x, float y, float z) {
 046    return ConvertCartesianToSpherical(new Vector3(x, y, z));
 047  }
 48
 049  public static Vector3 ConvertSphericalToCartesian(in Vector3 spherical) {
 050    float y = spherical.x * Mathf.Sin(spherical.z * Mathf.Deg2Rad);
 051    float x = spherical.x * Mathf.Cos(spherical.z * Mathf.Deg2Rad) *
 52              Mathf.Sin(spherical.y * Mathf.Deg2Rad);
 053    float z = spherical.x * Mathf.Cos(spherical.z * Mathf.Deg2Rad) *
 54              Mathf.Cos(spherical.y * Mathf.Deg2Rad);
 055    return new Vector3(x, y, z);
 056  }
 057  public static Vector3 ConvertSphericalToCartesian(float r, float azimuth, float elevation) {
 058    return ConvertSphericalToCartesian(new Vector3(r, azimuth, elevation));
 059  }
 60
 061  public static Vector3 ConvertCartesianToCylindrical(in Vector3 cartesian) {
 062    float r = Mathf.Sqrt(cartesian.x * cartesian.x + cartesian.z * cartesian.z);
 063    float azimuth = Mathf.Atan2(cartesian.x, cartesian.z) * Mathf.Rad2Deg;
 064    float height = cartesian.y;
 065    return new Vector3(r, azimuth, height);
 066  }
 067  public static Vector3 ConvertCartesianToCylindrical(float x, float y, float z) {
 068    return ConvertCartesianToCylindrical(new Vector3(x, y, z));
 069  }
 70
 071  public static Vector3 ConvertCylindricalToCartesian(in Vector3 cylindrical) {
 072    float y = cylindrical.z;
 073    float x = cylindrical.x * Mathf.Sin(cylindrical.y * Mathf.Deg2Rad);
 074    float z = cylindrical.x * Mathf.Cos(cylindrical.y * Mathf.Deg2Rad);
 075    return new Vector3(x, y, z);
 076  }
 077  public static Vector3 ConvertCylindricalToCartesian(float r, float azimuth, float height) {
 078    return ConvertCylindricalToCartesian(new Vector3(r, azimuth, height));
 079  }
 80
 528581  public static Vector3 FromProto(in Simulation.CartesianCoordinates coordinates) {
 528582    return new Vector3(coordinates.X, coordinates.Y, coordinates.Z);
 528583  }
 84
 151085  public static Simulation.CartesianCoordinates ToProto(in Vector3 cartesian) {
 151086    return new Simulation.CartesianCoordinates() {
 87      X = cartesian.x,
 88      Y = cartesian.y,
 89      Z = cartesian.z,
 90    };
 151091  }
 92}