private static (float extraDistance, float percentageAlongRoute) ExtraDistanceIncurred( GalacticSystem systemA, GalacticSystem systemB, GalacticPOI poi, float originalDistance) { var a = systemA.Coordinates; var b = systemB.Coordinates; var p = poi.Coordinates; var aToPOI = System.Numerics.Vector3.Distance(a, p); if (a == b) { return(aToPOI, 0f); } // Find the closest point to the POI along the straight line route, expressed as 0 (closest to a) to 1 (closest to b). float distanceSquared = originalDistance * originalDistance; float distanceAlongRoute = Math.Max(0f, Math.Min(1f, System.Numerics.Vector3.Dot(p - a, b - a) / distanceSquared)); var bToPOI = System.Numerics.Vector3.Distance(b, p); var distanceViaPOI = aToPOI + bToPOI; var extraDistance = distanceViaPOI - originalDistance; var approxPercentageAlongRoute = distanceAlongRoute * 100f; return(extraDistance, approxPercentageAlongRoute); }
public ScenicSuggestion(EDScenicRouteWeb.Server.Models.GalacticPOI poi, float extraDistance, float percentageAlongRoute) { POI = poi; ExtraDistance = extraDistance; PercentageAlongRoute = percentageAlongRoute; }