public int OverlapArea(Oblong s2) { bool row1Overlap = this.IncludesRow(s2.RowTop); bool row2Overlap = this.IncludesRow(s2.RowBottom); bool col1Overlap = this.IncludesColumn(s2.ColumnLeft); bool col2Overlap = this.IncludesColumn(s2.ColumnRight); if (row1Overlap && row2Overlap && col1Overlap && col2Overlap) { return(s2.Area()); } if (!row1Overlap && !row2Overlap && !col1Overlap && !col2Overlap && this.Overlaps(s2)) { return(this.Area()); } return(0); }
/// <summary> /// MAIN METHOD FOR UNIT TESTING /// </summary> private static void Main() { LoggedConsole.WriteLine("TESTING METHODS IN CLASS DataTools"); // string testDir = @"D:\SensorNetworks\Software\TowseyLib\TestResources\"; bool doit1 = false; if (doit1) { // test1 method AREA, CENTROID and CENTROID-DISTANCE() LoggedConsole.WriteLine("Test Method Name()"); int r1 = 10; int c1 = 10; int r2 = 20; int c2 = 20; var s1 = new Oblong(r1, c1, r2, c2); s1.WriteBounds(); int[] centroid1 = s1.Centroid(); LoggedConsole.WriteLine("Centroid1: r=" + centroid1[0] + " c=" + centroid1[1]); LoggedConsole.WriteLine("Area 1=" + s1.Area()); LoggedConsole.WriteLine(); r1 = 17; c1 = 16; r2 = 23; c2 = 24; var s2 = new Oblong(r1, c1, r2, c2); s2.WriteBounds(); int[] centroid2 = s2.Centroid(); LoggedConsole.WriteLine("Centroid2: r=" + centroid2[0] + " c=" + centroid2[1]); LoggedConsole.WriteLine("Area 2=" + s2.Area()); double dist = s1.CentroidDistance(s2); LoggedConsole.WriteLine("Distance=" + dist); } // end test1 bool doit2 = false; if (doit2) { // test2 method IncludesRow(), IncludesColumn(), PointInside() LoggedConsole.WriteLine("Test Method Name()"); int r1 = 10; int c1 = 10; int r2 = 20; int c2 = 20; var s1 = new Oblong(r1, c1, r2, c2); s1.WriteBounds(); r1 = 17; c1 = 16; r2 = 23; c2 = 24; var s2 = new Oblong(r1, c1, r2, c2); s2.WriteBounds(); r1 = 20; c1 = 20; r2 = 30; c2 = 30; var s3 = new Oblong(r1, c1, r2, c2); s3.WriteBounds(); LoggedConsole.WriteLine(); LoggedConsole.WriteLine("Row10 in s1=" + s1.IncludesRow(10)); LoggedConsole.WriteLine("Row15 in s1=" + s1.IncludesRow(15)); LoggedConsole.WriteLine("Row20 in s1=" + s1.IncludesRow(20)); LoggedConsole.WriteLine("Row25 in s1=" + s1.IncludesRow(25)); LoggedConsole.WriteLine("Col05 in s1=" + s1.IncludesColumn(5)); LoggedConsole.WriteLine("Col10 in s1=" + s1.IncludesColumn(10)); LoggedConsole.WriteLine("Col15 in s1=" + s1.IncludesColumn(15)); LoggedConsole.WriteLine("Col20 in s1=" + s1.IncludesColumn(20)); int py = 23; int px = 25; bool inside = s1.PointInside(py, px); LoggedConsole.WriteLine("\nPoint (" + py + "," + px + ") inside s1 =" + inside); inside = s2.PointInside(py, px); LoggedConsole.WriteLine("Point (" + py + "," + px + ") inside s2 =" + inside); inside = s3.PointInside(py, px); LoggedConsole.WriteLine("Point (" + py + "," + px + ") inside s3 =" + inside); bool overlapped = s1.Overlaps(s3); LoggedConsole.WriteLine("\ns1 and s3 overlap =" + overlapped); overlapped = s1.Overlaps(s2); LoggedConsole.WriteLine("s1 and s2 overlap =" + overlapped); } // end test2 if (true) { // test Method MergeShapes() LoggedConsole.WriteLine("Test MergeShapes()"); var list = new ArrayList(); int r1 = 10; int c1 = 10; int r2 = 20; int c2 = 20; var s1 = new Oblong(r1, c1, r2, c2); s1.WriteBounds(); list.Add(s1); r1 = 17; c1 = 16; r2 = 23; c2 = 24; var s2 = new Oblong(r1, c1, r2, c2); s2.WriteBounds(); list.Add(s2); r1 = 20; c1 = 20; r2 = 30; c2 = 30; var s3 = new Oblong(r1, c1, r2, c2); s3.WriteBounds(); list.Add(s3); LoggedConsole.WriteLine(" dy(s2-s1)= " + s1.RowShift(s2)); LoggedConsole.WriteLine(" dy(s3-s2)= " + s2.RowShift(s3)); int dyThreshold = 6; list = MergeShapesWhoseEndsOverlap(list, dyThreshold); LoggedConsole.WriteLine("List size=" + list.Count); foreach (Oblong s in list) { s.WriteBounds(); } } // end test3 // if (false) //test Method() // { // LoggedConsole.WriteLine("Test Method Name()"); // } //end test4 LoggedConsole.WriteLine("\nFINISHED!!"); Console.ReadLine(); }