< Summary

Class:Coordinates3
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Utils/Coordinates3.cs
Covered lines:6
Uncovered lines:36
Coverable lines:42
Total lines:71
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%770100%
ToProto(...)0%110100%

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 {
 012  public static Vector3 ConvertCartesianToSpherical(in Vector3 cartesian) {
 013    float r = cartesian.magnitude;
 014    float azimuth = Mathf.Atan2(cartesian.x, cartesian.z) * Mathf.Rad2Deg;
 015    float elevation = Mathf.Atan2(cartesian.y, Mathf.Sqrt(cartesian.x * cartesian.x +
 16                                                          cartesian.z * cartesian.z)) *
 17                      Mathf.Rad2Deg;
 018    return new Vector3(r, azimuth, elevation);
 019  }
 20
 021  public static Vector3 ConvertCartesianToSpherical(float x, float y, float z) {
 022    return ConvertCartesianToSpherical(new Vector3(x, y, z));
 023  }
 24
 025  public static Vector3 ConvertSphericalToCartesian(in Vector3 spherical) {
 026    float y = spherical.x * Mathf.Sin(spherical.z * Mathf.Deg2Rad);
 027    float x = spherical.x * Mathf.Cos(spherical.z * Mathf.Deg2Rad) *
 28              Mathf.Sin(spherical.y * Mathf.Deg2Rad);
 029    float z = spherical.x * Mathf.Cos(spherical.z * Mathf.Deg2Rad) *
 30              Mathf.Cos(spherical.y * Mathf.Deg2Rad);
 031    return new Vector3(x, y, z);
 032  }
 33
 034  public static Vector3 ConvertSphericalToCartesian(float r, float azimuth, float elevation) {
 035    return ConvertSphericalToCartesian(new Vector3(r, azimuth, elevation));
 036  }
 37
 038  public static Vector3 ConvertCartesianToCylindrical(in Vector3 cartesian) {
 039    float r = Mathf.Sqrt(cartesian.x * cartesian.x + cartesian.z * cartesian.z);
 040    float azimuth = Mathf.Atan2(cartesian.x, cartesian.z) * Mathf.Rad2Deg;
 041    float height = cartesian.y;
 042    return new Vector3(r, azimuth, height);
 043  }
 44
 045  public static Vector3 ConvertCartesianToCylindrical(float x, float y, float z) {
 046    return ConvertCartesianToCylindrical(new Vector3(x, y, z));
 047  }
 48
 049  public static Vector3 ConvertCylindricalToCartesian(in Vector3 cylindrical) {
 050    float y = cylindrical.z;
 051    float x = cylindrical.x * Mathf.Sin(cylindrical.y * Mathf.Deg2Rad);
 052    float z = cylindrical.x * Mathf.Cos(cylindrical.y * Mathf.Deg2Rad);
 053    return new Vector3(x, y, z);
 054  }
 55
 056  public static Vector3 ConvertCylindricalToCartesian(float r, float azimuth, float height) {
 057    return ConvertCylindricalToCartesian(new Vector3(r, azimuth, height));
 058  }
 59
 575860  public static Vector3 FromProto(Simulation.CartesianCoordinates coordinates) {
 575861    return new Vector3(coordinates?.X ?? 0, coordinates?.Y ?? 0, coordinates?.Z ?? 0);
 575862  }
 63
 191064  public static Simulation.CartesianCoordinates ToProto(in Vector3 cartesian) {
 191065    return new Simulation.CartesianCoordinates() {
 66      X = cartesian.x,
 67      Y = cartesian.y,
 68      Z = cartesian.z,
 69    };
 191070  }
 71}