コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
ファイル: DistanceTest.cs プロジェクト: GretelF/squircle
        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));
        }