public IWaterPacket GetSourceWater(DateTime Start, TimeSpan TimeStep)
        {
            foreach (var kvp in _concentrations)
            {
                ((WaterPacket)WaterSample).SetConcentration(kvp.Key, kvp.Value.GetSiValue(Start, Start.Add(TimeStep)));
            }

            if (OverrideFlowRate.HasValue)
            {
                _currentFlowRate = OverrideFlowRate.Value;
            }
            else if (TS != null)
            {
                _currentFlowRate = TS.GetSiValue(Start, Start.Add(TimeStep));
            }

            double _routedFlow = _currentFlowRate * TimeStep.TotalSeconds;

            //Could be a point
            XYPolygon geom = ContactGeometry as XYPolygon;

            if (geom != null)
            {
                _routedFlow *= geom.GetArea();
            }

            return(WaterSample.DeepClone(_routedFlow));
        }
Exemple #2
0
        public void CalculateSharedArea()
        {
            XYPolygon p1 = new XYPolygon();

            p1.Points.Add(new XYPoint(0, 3));
            p1.Points.Add(new XYPoint(3, 0));
            p1.Points.Add(new XYPoint(8, 0));
            p1.Points.Add(new XYPoint(8, 2));
            p1.Points.Add(new XYPoint(3, 1));
            p1.Points.Add(new XYPoint(3, 3));
            p1.Points.Add(new XYPoint(8, 3));
            p1.Points.Add(new XYPoint(4, 7));

            XYPolygon p2 = new XYPolygon();

            p2.Points.Add(new XYPoint(3, 3));
            p2.Points.Add(new XYPoint(4, 3));
            p2.Points.Add(new XYPoint(4, 4));
            p2.Points.Add(new XYPoint(3, 4));

            XYPolygon p3 = new XYPolygon();

            p3.Points.Add(new XYPoint(0, 0));
            p3.Points.Add(new XYPoint(8, 0));
            p3.Points.Add(new XYPoint(8, 8));
            p3.Points.Add(new XYPoint(0, 8));

            XYPolygon p4 = new XYPolygon();

            p4.Points.Add(new XYPoint(-2, 0));
            p4.Points.Add(new XYPoint(3, 0));
            p4.Points.Add(new XYPoint(3, 2));
            p4.Points.Add(new XYPoint(0, 2));
            p4.Points.Add(new XYPoint(0, 5));
            p4.Points.Add(new XYPoint(4, 5));
            p4.Points.Add(new XYPoint(4, 7));
            p4.Points.Add(new XYPoint(-2, 7));

            Assert.AreEqual(p1.GetArea(), XYGeometryTools.CalculateSharedArea(p1, p1), 1e-12, "Test1 - Polygon1 in Polygon1");
            Assert.AreEqual(p2.GetArea(), XYGeometryTools.CalculateSharedArea(p2, p2), 1e-12, "Test2 - Polygon1 in Polygon1");
            Assert.AreEqual(p4.GetArea(), XYGeometryTools.CalculateSharedArea(p4, p4), 1e-12, "Test3 - Polygon1 in Polygon1");
            Assert.AreEqual(p2.GetArea(), XYGeometryTools.CalculateSharedArea(p1, p2), 1e-12, "Test4 - Polygon2 in Polygon1");
            Assert.AreEqual(p1.GetArea(), XYGeometryTools.CalculateSharedArea(p1, p3), 1e-12, "Test5 - Polygon1 in Polygon2");
            Assert.AreEqual(4, XYGeometryTools.CalculateSharedArea(p1, p4), 1e-12, "Test6 - Polygon1 in Polygon3");
        }
Exemple #3
0
        public void Protected_TriangleIntersectionArea()
        {
            XYPolygon t1 = new XYPolygon();

            t1.Points.Add(new XYPoint(0.0, 0.5));
            t1.Points.Add(new XYPoint(6.0, 0.5));
            t1.Points.Add(new XYPoint(1.0, 7.0));

            XYPolygon t2 = new XYPolygon();

            t2.Points.Add(new XYPoint(1, 1));
            t2.Points.Add(new XYPoint(5, 1));
            t2.Points.Add(new XYPoint(1, 5));

            XYPolygon t3 = new XYPolygon();

            t3.Points.Add(new XYPoint(1, 1));
            t3.Points.Add(new XYPoint(3, 1));
            t3.Points.Add(new XYPoint(1, 3));

            XYPolygon t4 = new XYPolygon();

            t4.Points.Add(new XYPoint(1, 2));
            t4.Points.Add(new XYPoint(3, 2));
            t4.Points.Add(new XYPoint(3, 4));

            XYPolygon t5 = new XYPolygon();

            t5.Points.Add(new XYPoint(6.5, 3.5));
            t5.Points.Add(new XYPoint(9.5, 3.4));
            t5.Points.Add(new XYPoint(7, 5));

            XYPolygon t6 = new XYPolygon();

            t6.Points.Add(new XYPoint(-2, 0));
            t6.Points.Add(new XYPoint(3, 0));
            t6.Points.Add(new XYPoint(3, 2));

            //t2 is fully inside t1
            Assert.AreEqual(8, AXYGeometryTools.ATriangleIntersectionArea(t2, t1), "t2, t1");
            Assert.AreEqual(8, AXYGeometryTools.ATriangleIntersectionArea(t1, t2), "t1, t2");

            // t4 is partly inside t2
            Assert.AreEqual((double)7 / (double)4, AXYGeometryTools.ATriangleIntersectionArea(t2, t4), "t2, t4");
            Assert.AreEqual((double)7 / (double)4, AXYGeometryTools.ATriangleIntersectionArea(t4, t2), "t4, t2");

            // t3 is inside t2 but is sharing two edges
            Assert.AreEqual(2, AXYGeometryTools.ATriangleIntersectionArea(t2, t3), "t2, t3");
            Assert.AreEqual(2, AXYGeometryTools.ATriangleIntersectionArea(t3, t2), "t3, t2");

            // t1 and t5 has no overlap
            Assert.AreEqual(0, AXYGeometryTools.ATriangleIntersectionArea(t1, t5), "t1, t5");
            Assert.AreEqual(0, AXYGeometryTools.ATriangleIntersectionArea(t5, t1), "t5, t1");

            // two times t6
            Assert.AreEqual(t6.GetArea(), AXYGeometryTools.ATriangleIntersectionArea(t6, t6), "t6, t6");
        }
        public void GetArea()
        {
            // -- Rectangle --
            XYPolygon xypolygon = new XYPolygon();

            xypolygon.Points.Add(new XYPoint(1, 1));
            xypolygon.Points.Add(new XYPoint(9, 1));
            xypolygon.Points.Add(new XYPoint(9, 6));
            xypolygon.Points.Add(new XYPoint(1, 6));
            Assert.AreEqual((double)40, xypolygon.GetArea());

            // -- Triangle --
            XYPolygon xypolygon2 = new XYPolygon();

            xypolygon2.Points.Add(new XYPoint(1, 1));
            xypolygon2.Points.Add(new XYPoint(9, 1));
            xypolygon2.Points.Add(new XYPoint(9, 6));
            Assert.AreEqual((double)20, xypolygon2.GetArea());

            // -- concave --
            XYPolygon xypolygon3 = new XYPolygon();

            xypolygon3.Points.Add(new XYPoint(1, 1));
            xypolygon3.Points.Add(new XYPoint(5, 3));
            xypolygon3.Points.Add(new XYPoint(9, 1));
            xypolygon3.Points.Add(new XYPoint(9, 6));
            xypolygon3.Points.Add(new XYPoint(1, 6));
            Assert.AreEqual((double)32, xypolygon3.GetArea());

            // -- concave --
            XYPolygon xypolygon4 = new XYPolygon();

            xypolygon4.Points.Add(new XYPoint(1, 1));
            xypolygon4.Points.Add(new XYPoint(9, 1));
            xypolygon4.Points.Add(new XYPoint(5, 5));
            xypolygon4.Points.Add(new XYPoint(5, 3));
            xypolygon4.Points.Add(new XYPoint(3, 3));
            xypolygon4.Points.Add(new XYPoint(3, 8));
            xypolygon4.Points.Add(new XYPoint(9, 8));
            xypolygon4.Points.Add(new XYPoint(9, 11));
            xypolygon4.Points.Add(new XYPoint(1, 11));
            Assert.AreEqual((double)50, xypolygon4.GetArea());
        }
Exemple #5
0
        public void ContainsTest()
        {
            XYPolygon inner = new XYPolygon();

            inner.Points.Add(new XYPoint(0, 0));
            inner.Points.Add(new XYPoint(0, 1));
            inner.Points.Add(new XYPoint(1, 1));
            inner.Points.Add(new XYPoint(1, 0));

            Assert.IsTrue(inner.Contains(0.5, 0.5));

            Assert.IsTrue(0 > inner.GetArea());

            XYPolygon outer = new XYPolygon();

            outer.Points.Add(new XYPoint(0, 0));
            outer.Points.Add(new XYPoint(1, 0));
            outer.Points.Add(new XYPoint(1, 1));
            outer.Points.Add(new XYPoint(0, 1));
            Assert.IsTrue(outer.Contains(0.5, 0.5));

            Assert.IsTrue(0 < outer.GetArea());
        }
Exemple #6
0
        public void GetArea()
        {
            // -- Rectangle --
            XYPolygon xypolygon = new XYPolygon();

            xypolygon.Points.Add(new XYPoint(1, 1));
            xypolygon.Points.Add(new XYPoint(9, 1));
            xypolygon.Points.Add(new XYPoint(9, 6));
            xypolygon.Points.Add(new XYPoint(1, 6));
            Assert.AreEqual((double)40, xypolygon.GetArea());

            // -- Triangle --
            XYPolygon xypolygon2 = new XYPolygon();

            xypolygon2.Points.Add(new XYPoint(1, 1));
            xypolygon2.Points.Add(new XYPoint(9, 1));
            xypolygon2.Points.Add(new XYPoint(9, 6));
            Assert.AreEqual((double)20, xypolygon2.GetArea());

            xypolygon2 = new XYPolygon();
            xypolygon2.Points.Add(new XYPoint(1, 1));
            xypolygon2.Points.Add(new XYPoint(9, 1));
            xypolygon2.Points.Add(new XYPoint(6, 6));
            Assert.AreEqual((double)20, xypolygon2.GetArea());

            xypolygon2 = new XYPolygon();
            xypolygon2.Points.Add(new XYPoint(14.1148486860759, 21.9761381987358));
            xypolygon2.Points.Add(new XYPoint(10, 21.25));
            xypolygon2.Points.Add(new XYPoint(13.4598698727912, 19.0016033592988));

            Console.Out.WriteLine(xypolygon2.GetArea());

            IList <XYPoint> p   = xypolygon2.Points;
            double          abx = p[1].X - p[0].X;
            double          aby = p[1].Y - p[0].Y;
            double          acx = p[2].X - p[0].X;
            double          acy = p[2].Y - p[0].Y;

            Console.Out.WriteLine(0.5 * (abx * acy - aby * acx));

            // -- concave --
            XYPolygon xypolygon3 = new XYPolygon();

            xypolygon3.Points.Add(new XYPoint(1, 1));
            xypolygon3.Points.Add(new XYPoint(5, 3));
            xypolygon3.Points.Add(new XYPoint(9, 1));
            xypolygon3.Points.Add(new XYPoint(9, 6));
            xypolygon3.Points.Add(new XYPoint(1, 6));
            Assert.AreEqual((double)32, xypolygon3.GetArea());

            // -- concave --
            XYPolygon xypolygon4 = new XYPolygon();

            xypolygon4.Points.Add(new XYPoint(1, 1));
            xypolygon4.Points.Add(new XYPoint(9, 1));
            xypolygon4.Points.Add(new XYPoint(5, 5));
            xypolygon4.Points.Add(new XYPoint(5, 3));
            xypolygon4.Points.Add(new XYPoint(3, 3));
            xypolygon4.Points.Add(new XYPoint(3, 8));
            xypolygon4.Points.Add(new XYPoint(9, 8));
            xypolygon4.Points.Add(new XYPoint(9, 11));
            xypolygon4.Points.Add(new XYPoint(1, 11));
            Assert.AreEqual((double)50, xypolygon4.GetArea());
        }
        public void SquareTest()
        {
            XYPolygon pol = XYPolygon.GetSquare(25);

            Assert.AreEqual(25, pol.GetArea());
        }