Exemplo n.º 1
0
        public void Test_S2ClosestCellQuery_OptionsNotModified()
        {
            // Tests that FindClosestCell(), GetDistance(), and IsDistanceLess() do not
            // modify query.Options_, even though all of these methods have their own
            // specific options requirements.
            S2ClosestCellQuery.Options options = new();
            options.MaxResults  = (3);
            options.MaxDistance = (S1ChordAngle.FromDegrees(3));
            options.MaxError    = (S1ChordAngle.FromDegrees(0.001));
            S2CellIndex index = new();

            index.Add(new S2CellId(MakePointOrDie("1:1")), 1);
            index.Add(new S2CellId(MakePointOrDie("1:2")), 2);
            index.Add(new S2CellId(MakePointOrDie("1:3")), 3);
            index.Build();
            S2ClosestCellQuery query = new(index, options);

            S2ClosestCellQuery.PointTarget target = new(MakePointOrDie("2:2"));
            Assert.Equal(2, query.FindClosestCell(target).Label);
            Assert2.Near(1.0, query.GetDistance(target).Degrees(), 1e-7);
            Assert.True(query.IsDistanceLess(target, S1ChordAngle.FromDegrees(1.5)));

            // Verify that none of the options above were modified.
            Assert.Equal(options.MaxResults, query.Options_.MaxResults);
            Assert.Equal(options.MaxDistance, query.Options_.MaxDistance);
            Assert.Equal(options.MaxError, query.Options_.MaxError);
        }
Exemplo n.º 2
0
    public void Test_S1ChordAngle_Arithmetic()
    {
        S1ChordAngle zero     = S1ChordAngle.Zero;
        S1ChordAngle degree30 = S1ChordAngle.FromDegrees(30);   //0.26794919243112264
        S1ChordAngle degree60 = S1ChordAngle.FromDegrees(60);   //0.99999999999999978
        S1ChordAngle degree90 = S1ChordAngle.FromDegrees(90);
        //1.9999999999999996
        //2.0000000000000004
        S1ChordAngle degree120 = S1ChordAngle.FromDegrees(120); //2.9999999999999996
        S1ChordAngle degree180 = S1ChordAngle.Straight;

        Assert.Equal(0, (zero + zero).Degrees());
        Assert.Equal(0, (zero - zero).Degrees());
        Assert.Equal(0, (degree60 - degree60).Degrees());
        Assert.Equal(0, (degree180 - degree180).Degrees());
        Assert.Equal(0, (zero - degree60).Degrees());
        Assert.Equal(0, (degree30 - degree90).Degrees());
        Assert2.DoubleEqual(60, (degree60 + zero).Degrees());
        Assert2.DoubleEqual(60, (degree60 - zero).Degrees());
        Assert2.DoubleEqual(60, (zero + degree60).Degrees());
        Assert2.DoubleEqual(90, (degree30 + degree60).Degrees());
        Assert2.DoubleEqual(90, (degree60 + degree30).Degrees());
        Assert2.DoubleEqual(60, (degree90 - degree30).Degrees());
        Assert2.DoubleEqual(30, (degree90 - degree60).Degrees(), 5);
        Assert.Equal(180, (degree180 + zero).Degrees());
        Assert.Equal(180, (degree180 - zero).Degrees());
        Assert.Equal(180, (degree90 + degree90).Degrees());
        Assert.Equal(180, (degree120 + degree90).Degrees());
        Assert.Equal(180, (degree120 + degree120).Degrees());
        Assert.Equal(180, (degree30 + degree180).Degrees());
        Assert.Equal(180, (degree180 + degree180).Degrees());
    }
Exemplo n.º 3
0
        public void Test_S2ClosestEdgeQuery_OptionsNotModified()
        {
            // Tests that FindClosestEdge(), GetDistance(), and IsDistanceLess() do not
            // modify query.Options_, even though all of these methods have their own
            // specific options requirements.
            S2ClosestEdgeQuery.Options options = new();
            options.MaxResults  = (3);
            options.MaxDistance = (Distance.FromDegrees(3));
            options.MaxError    = (Distance.FromDegrees(0.001));
            var index = MakeIndexOrDie("1:1 | 1:2 | 1:3 # #");
            S2ClosestEdgeQuery query = new(index, options);

            S2ClosestEdgeQuery.PointTarget target = new(MakePointOrDie("2:2"));
            Assert.Equal(1, query.FindClosestEdge(target).EdgeId);
            Assert2.Near(1.0, query.GetDistance(target).Degrees(), S2.DoubleError);
            Assert.True(query.IsDistanceLess(target, Distance.FromDegrees(1.5)));

            // Verify that none of the options above were modified.
            Assert.Equal(options.MaxResults, query.Options_.MaxResults);
            Assert.Equal(options.MaxDistance, query.Options_.MaxDistance);
            Assert.Equal(options.MaxError, query.Options_.MaxError);
        }