public JsonResult GetDistance(DistanceInput distanceInput) { double distance = 0; var airportsData = _cachingManager.GetFromCache(Constants.KEY_CACHE_LOCATIONS) as Location[]; if (airportsData == null) { return(Json(distance, JsonRequestBehavior.AllowGet)); } var source = airportsData.First(airport => airport.iata.Equals(distanceInput.SourceAirport)); var destination = airportsData.First(airport => airport.iata.Equals(distanceInput.DestinationAirport)); var sourceCoordinates = new Coordinates(); var destinationCoordinates = new Coordinates(); if (source != null && destination != null) { sourceCoordinates = new Coordinates { latitude = double.Parse(source.lat), longitude = double.Parse(source.lon) }; destinationCoordinates = new Coordinates { latitude = double.Parse(destination.lat), longitude = double.Parse(destination.lon) }; } distance = _distanceCalculator.Calculate(sourceCoordinates, destinationCoordinates); return(Json(distance, JsonRequestBehavior.AllowGet)); }
public void Step(TestSettings settings) { base.Step(settings); DistanceInput input = new DistanceInput(); input.proxyA.Set(m_polygonA, 0); input.proxyB.Set(m_polygonB, 0); input.transformA = m_transformA; input.transformB = m_transformB; input.useRadii = true; SimplexCache cache = new SimplexCache(); cache.count = 0; DistanceOutput output; Utilities.Distance(out output, cache, input); m_debugDraw.DrawString("distance = %g", output.distance); m_debugDraw.DrawString("iterations = %d", output.iterations); { Color color = Color.FromArgb(225, 225, 225); Vec2[] v = new Vec2[Settings._maxPolygonVertices]; for (int i = 0; i < m_polygonA.m_count; ++i) { v[i] = Utilities.Mul(m_transformA, m_polygonA.m_vertices[i]); } m_debugDraw.DrawPolygon(v, m_polygonA.m_count, color); for (int i = 0; i < m_polygonB.m_count; ++i) { v[i] = Utilities.Mul(m_transformB, m_polygonB.m_vertices[i]); } m_debugDraw.DrawPolygon(v, m_polygonB.m_count, color); } Vec2 x1 = output.pointA; Vec2 x2 = output.pointB; Color c1 = Color.FromArgb(255, 0, 0); m_debugDraw.DrawPoint(x1, 4.0f, c1); Color c2 = Color.FromArgb(255, 255, 0); m_debugDraw.DrawPoint(x2, 4.0f, c2); }
/// <summary>Test overlap between the two shapes.</summary> /// <param name="shapeA">The first shape.</param> /// <param name="indexA">The index for the first shape.</param> /// <param name="shapeB">The second shape.</param> /// <param name="indexB">The index for the second shape.</param> /// <param name="xfA">The transform for the first shape.</param> /// <param name="xfB">The transform for the seconds shape.</param> public static bool TestOverlap(Shape shapeA, int indexA, Shape shapeB, int indexB, ref Transform xfA, ref Transform xfB) { DistanceInput input = new DistanceInput(); input.ProxyA = new DistanceProxy(shapeA, indexA); input.ProxyB = new DistanceProxy(shapeB, indexB); input.TransformA = xfA; input.TransformB = xfB; input.UseRadii = true; DistanceGJK.ComputeDistance(ref input, out DistanceOutput output, out _); return(output.Distance < 10.0f * MathConstants.Epsilon); }
public override void Step(Framework.Settings settings) { base.Step(settings); DistanceInput input = new DistanceInput(); input.proxyA.Set(_polygonA, 0); input.proxyB.Set(_polygonB, 0); input.transformA = _transformA; input.transformB = _transformB; input.useRadii = true; SimplexCache cache = new SimplexCache(); cache.count = 0; DistanceOutput output = new DistanceOutput(); Distance.ComputeDistance( out output, out cache, ref input); _debugDraw.DrawString(50, _textLine, "distance = {0:n}", output.distance); _textLine += 15; _debugDraw.DrawString(50, _textLine, "iterations = {0:n}", output.iterations); _textLine += 15; { Color color = new Color(0.9f, 0.9f, 0.9f); FixedArray8<Vector2> v = new FixedArray8<Vector2>(); for (int i = 0; i < _polygonA._vertexCount; ++i) { v[i] = MathUtils.Multiply(ref _transformA, _polygonA._vertices[i]); } _debugDraw.DrawPolygon(ref v, _polygonA._vertexCount, color); for (int i = 0; i < _polygonB._vertexCount; ++i) { v[i] = MathUtils.Multiply(ref _transformB, _polygonB._vertices[i]); } _debugDraw.DrawPolygon(ref v, _polygonB._vertexCount, color); } Vector2 x1 = output.pointA; Vector2 x2 = output.pointB; _debugDraw.DrawPoint(x1, 0.5f, new Color(1.0f, 0.0f, 0.0f)); _debugDraw.DrawPoint(x2, 0.5f, new Color(1.0f, 0.0f, 0.0f)); _debugDraw.DrawSegment(x1, x2, new Color(1.0f, 1.0f, 0.0f)); }