< Summary

Class:Coordinates3
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Utils/Coordinates3.cs
Covered lines:33
Uncovered lines:9
Coverable lines:42
Total lines:71
Line coverage:78.5% (33 of 42)
Covered branches:0
Total branches:0
Covered methods:7
Total methods:10
Method coverage:70% (7 of 10)

Metrics

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

File(s)

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

#LineLine coverage
 1using UnityEngine;
 2
 3// Utility functions for 3D coordinates.
 4// In Cartesian coordinates, the x-axis points right, the y-axis points up, and the z-axis points
 5// forward. The coordinates are given by (x, y, z).
 6// In spherical coordinates, the azimuth is measured in degrees from the z-axis clockwise to the
 7// x-axis, and elevation is measured in degrees from the x-z plane up to the y-axis. The coordinates
 8// are given by (r, azimuth, elevation).
 9// In cylindrical coordinates, the azimuth is measured in degrees from the z-axis clockwise to the
 10// x-axis. The coordinates are given by (r, azimuth, height).
 11public static class Coordinates3 {
 1112  public static Vector3 ConvertCartesianToSpherical(in Vector3 cartesian) {
 1113    float r = cartesian.magnitude;
 1114    float azimuth = Mathf.Atan2(cartesian.x, cartesian.z) * Mathf.Rad2Deg;
 1115    float elevation = Mathf.Atan2(cartesian.y, Mathf.Sqrt(cartesian.x * cartesian.x +
 16                                                          cartesian.z * cartesian.z)) *
 17                      Mathf.Rad2Deg;
 1118    return new Vector3(r, azimuth, elevation);
 1119  }
 20
 021  public static Vector3 ConvertCartesianToSpherical(float x, float y, float z) {
 022    return ConvertCartesianToSpherical(new Vector3(x, y, z));
 023  }
 24
 1925  public static Vector3 ConvertSphericalToCartesian(in Vector3 spherical) {
 1926    float y = spherical.x * Mathf.Sin(spherical.z * Mathf.Deg2Rad);
 1927    float x = spherical.x * Mathf.Cos(spherical.z * Mathf.Deg2Rad) *
 28              Mathf.Sin(spherical.y * Mathf.Deg2Rad);
 1929    float z = spherical.x * Mathf.Cos(spherical.z * Mathf.Deg2Rad) *
 30              Mathf.Cos(spherical.y * Mathf.Deg2Rad);
 1931    return new Vector3(x, y, z);
 1932  }
 33
 434  public static Vector3 ConvertSphericalToCartesian(float r, float azimuth, float elevation) {
 435    return ConvertSphericalToCartesian(new Vector3(r, azimuth, elevation));
 436  }
 37
 2538  public static Vector3 ConvertCartesianToCylindrical(in Vector3 cartesian) {
 2539    float r = Mathf.Sqrt(cartesian.x * cartesian.x + cartesian.z * cartesian.z);
 2540    float azimuth = Mathf.Atan2(cartesian.x, cartesian.z) * Mathf.Rad2Deg;
 2541    float height = cartesian.y;
 2542    return new Vector3(r, azimuth, height);
 2543  }
 44
 045  public static Vector3 ConvertCartesianToCylindrical(float x, float y, float z) {
 046    return ConvertCartesianToCylindrical(new Vector3(x, y, z));
 047  }
 48
 2949  public static Vector3 ConvertCylindricalToCartesian(in Vector3 cylindrical) {
 2950    float y = cylindrical.z;
 2951    float x = cylindrical.x * Mathf.Sin(cylindrical.y * Mathf.Deg2Rad);
 2952    float z = cylindrical.x * Mathf.Cos(cylindrical.y * Mathf.Deg2Rad);
 2953    return new Vector3(x, y, z);
 2954  }
 55
 1856  public static Vector3 ConvertCylindricalToCartesian(float r, float azimuth, float height) {
 1857    return ConvertCylindricalToCartesian(new Vector3(r, azimuth, height));
 1858  }
 59
 160  public static Vector3 FromProto(Simulation.CartesianCoordinates coordinates) {
 161    return new Vector3(coordinates?.X ?? 0, coordinates?.Y ?? 0, coordinates?.Z ?? 0);
 162  }
 63
 064  public static Simulation.CartesianCoordinates ToProto(in Vector3 cartesian) {
 065    return new Simulation.CartesianCoordinates() {
 66      X = cartesian.x,
 67      Y = cartesian.y,
 68      Z = cartesian.z,
 69    };
 070  }
 71}