diff --git a/rectangle.go b/rectangle.go index 50e7d1a..4f45bf1 100644 --- a/rectangle.go +++ b/rectangle.go @@ -14,10 +14,10 @@ type Rectangle struct { // maximum error used for floating point math var ɛ = 0.00001 -// isRect determins if the rectangle provided really is a rectangle, which +// IsRect determins if the rectangle provided really is a rectangle, which // by definition means a plane figure with four straight sides and four // right angles. -func (r Rectangle) isRect() bool { +func (r Rectangle) IsRect() bool { // make sure they aren't all just the same point if (r.P1.X == r.P2.X && r.P1.X == r.P3.X && r.P1.X == r.P4.X) && (r.P1.Y == r.P2.Y && r.P1.Y == r.P3.Y && r.P1.Y == r.P4.Y) { @@ -112,6 +112,19 @@ func Adjacency(r1, r2 Rectangle) bool { return false } +func removeDuplicates(xs *[]Point) { + found := make(map[Point]bool) + j := 0 + for i, x := range *xs { + if !found[x] { + found[x] = true + (*xs)[j] = (*xs)[i] + j++ + } + } + *xs = (*xs)[:j] +} + // Intersection determine whether two rectangles, r1 and r2, have one or more // intersecting lines and produce a result, []Point, identifying the points // of intersection @@ -141,6 +154,8 @@ func Intersection(r1, r2 Rectangle) []Point { } } } + + removeDuplicates(&pts) return pts } diff --git a/rectangle_test.go b/rectangle_test.go index 487ae4e..6b13844 100644 --- a/rectangle_test.go +++ b/rectangle_test.go @@ -16,10 +16,10 @@ func TestIsRect(t *testing.T) { {Rectangle{P1: Point{0, 0}, P2: Point{0, 0}, P3: Point{0, 0}, P4: Point{0, 0}}, false}, } for _, rt := range isRectTests { - actual := rt.r.isRect() + actual := rt.r.IsRect() if actual != rt.expected { t.Errorf( - "failed isRect:\n\texpected: %t\n\t actual: %t", + "failed IsRect:\n\texpected: %t\n\t actual: %t", rt.expected, actual, ) @@ -29,7 +29,7 @@ func TestIsRect(t *testing.T) { } func TestSize(t *testing.T) { - var isRectTests = []struct { + var sizeTests = []struct { r Rectangle expected float64 }{ @@ -40,7 +40,7 @@ func TestSize(t *testing.T) { {Rectangle{P1: Point{0, 0}, P2: Point{0, 3}, P3: Point{2, 0}, P4: Point{2, 3}}, 6}, {Rectangle{P1: Point{0, 0}, P2: Point{0, 100}, P3: Point{100, 0}, P4: Point{100, 100}}, 10000}, } - for _, rt := range isRectTests { + for _, rt := range sizeTests { actual := rt.r.size() if actual != rt.expected { t.Errorf( @@ -160,7 +160,7 @@ func TestIntersection(t *testing.T) { []Rectangle{ Rectangle{Point{0, 0}, Point{0, 3}, Point{3, 0}, Point{3, 3}}, Rectangle{Point{0, 0}, Point{0, -1}, Point{-1, 0}, Point{-1, -1}}}, - []Point{Point{0, 0}, Point{0, 0}}, + []Point{Point{0, 0}}, }, { []Rectangle{