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)); }
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"); }
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()); }
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()); }
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()); }