Пример #1
0
        static void Main(string[] args)
        {
            //ShapeBase shape = new ShapeBase();
            Triangle triangle = new Triangle(3, 4, 5);

            Console.WriteLine(triangle.Name);
            Console.WriteLine(triangle.GetPerimeter());
            Console.WriteLine(triangle.GetSquare());
            IsoscelesTriangle triangle2 = new IsoscelesTriangle(5, 4);

            Console.WriteLine(triangle2.Name);
            Console.WriteLine(triangle2.GetPerimeter());
            Console.WriteLine(triangle2.GetSquare());
            EquilateralTriangle triangle3 = new EquilateralTriangle(3);

            Console.WriteLine(triangle3.Name);
            Console.WriteLine(triangle3.GetPerimeter());
            Console.WriteLine(triangle3.GetSquare());
            RectangularTriangle triangle4 = new RectangularTriangle(3, 4);

            Console.WriteLine(triangle4.Name);
            Console.WriteLine(triangle4.GetPerimeter());
            Console.WriteLine(triangle4.GetSquare());
            Console.ReadKey();
        }
Пример #2
0
        static void Main(string[] args)
        {
            try
            {
                RectangularTriangle rectTriangle1 = new RectangularTriangle(4, 5);
                RectangularTriangle rectTriangle2 = new RectangularTriangle(3, 4);
                //Calculate area and perimeter of rectTriangle1
                Console.WriteLine($"rectTriangle1`s area: {rectTriangle1.CalculateArea()}");
                Console.WriteLine($"rectTriangle1`s perimeter: {rectTriangle1.CalculatePerimeter()}");
                //Calculate area and perimeter of rectTriangle2
                Console.WriteLine($"rectTriangle2`s area: {rectTriangle2.CalculateArea()}");
                Console.WriteLine($"rectTriangle2`s perimeter: {rectTriangle2.CalculatePerimeter()}");

                IsoscelesTriangle isoscTriangle1 = new IsoscelesTriangle(3, 60);
                IsoscelesTriangle isoscTriangle2 = new IsoscelesTriangle(6, 60);
                // Calculate area and perimeter of isoscTriangle1
                Console.WriteLine($"isoscTriangle1`s area: {isoscTriangle1.CalculateArea()}");
                Console.WriteLine($"isoscTriangle1`s perimeter: {isoscTriangle1.CalculatePerimeter()}");
                // Calculate area and perimeter of isoscTriangle2
                Console.WriteLine($"isoscTriangle2`s area: {isoscTriangle2.CalculateArea()}");
                Console.WriteLine($"isoscTriangle2`s perimeter: {isoscTriangle2.CalculatePerimeter()}");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public static void Area()
        {
            IsoscelesTriangle triangle = new IsoscelesTriangle(6, 4);
            double            area     = triangle.Area();

            Assert.AreEqual(11.31371, area, Tolerance);
        }
Пример #4
0
        /// <summary>
        /// Figure out which triangles we can choose from before the window is shown.
        /// </summary>
        protected override void OnShow()
        {
            List <GroundedClause> givens = new List <GroundedClause>();

            //Populate list with applicable givens
            foreach (GroundedClause gc in currentGivens)
            {
                IsoscelesTriangle it = gc as IsoscelesTriangle;
                if (it != null)
                {
                    givens.Add(it);
                }
            }

            List <Triangle> isosTriangles = new List <Triangle>();

            //Populate list with possible choices
            foreach (Triangle t in parser.backendParser.implied.polygons[GeometryTutorLib.ConcreteAST.Polygon.TRIANGLE_INDEX])
            {
                if (isIsosceles(t))
                {
                    IsoscelesTriangle it = new IsoscelesTriangle(t);
                    if (!StructurallyContains(givens, it))
                    {
                        isosTriangles.Add(it);
                    }
                }
            }

            options.ItemsSource = null; //Makes sure the box is graphically updated.
            options.ItemsSource = isosTriangles;
        }
Пример #5
0
        public void TestIsoscelesTriangle(int x1, int y1, int x2, int y2, int[] ExPoints)
        {
            IsoscelesTriangle Actual = new IsoscelesTriangle();
            bool ActualPoint         = Actual.CheckForMatches(x1, y1, x2, y2, 0, ExPoints);
            bool Expected            = true;

            Assert.AreEqual(Expected, ActualPoint);
        }
Пример #6
0
        public void Create_IsoscelesTriangleForInvalidData_TriangleTypeException()
        {
            // arrange
            var sides = ReadTriangleSidesFromTestContext();

            // act
            var res = new IsoscelesTriangle(sides);

            // assert
        }
        public static void LocalCoordinates()
        {
            IsoscelesTriangle           triangle    = new IsoscelesTriangle(6, 4);
            IList <CartesianCoordinate> coordinates = triangle.LocalCoordinates();

            Assert.AreEqual(3, coordinates.Count);
            Assert.AreEqual(triangleCoordinates[0].X, coordinates[0].X);
            Assert.AreEqual(triangleCoordinates[0].Y, coordinates[0].Y, Tolerance);
            Assert.AreEqual(triangleCoordinates[1], coordinates[1]);
            Assert.AreEqual(triangleCoordinates[2], coordinates[2]);
        }
Пример #8
0
        public void Create_IsoscelesTriangleForValidData_IsIsoscelesTriangle()
        {
            // arrange
            var sides = ReadTriangleSidesFromTestContext();

            // act
            var res = new IsoscelesTriangle(sides);

            // assert
            Assert.IsInstanceOfType(res, typeof(IsoscelesTriangle));
        }
Пример #9
0
        static void Main(string[] args)
        {
            Shape f1, f2;

            f1 = new IsoscelesTriangle(10, 10, 10);
            double a = f1.GetАrea();
            string b = f1.GetName();

            f2 = new Square(10);
            double a1 = f2.GetАrea();
            string a2 = f2.GetName();
        }
        public static List <GenericInstantiator.EdgeAggregator> GeneratePerpendicularBisector(GroundedClause tri, AngleBisector ab, Intersection inter)
        {
            List <EdgeAggregator> newGrounded = new List <EdgeAggregator>();

            IsoscelesTriangle isoTri = (tri is Strengthened ? (tri as Strengthened).strengthened : tri) as IsoscelesTriangle;

            if (tri is EquilateralTriangle)
            {
            }

            // Does the Angle Bisector occur at the vertex angle (non-base angles) of the Isosceles triangle?
            try
            {
                if (!ab.angle.GetVertex().Equals(isoTri.GetVertexAngle().GetVertex()))
                {
                    return(newGrounded);
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e.ToString());
            }

            // Is the intersection point between the endpoints of the base of the triangle?
            if (!Segment.Between(inter.intersect, isoTri.baseSegment.Point1, isoTri.baseSegment.Point2))
            {
                return(newGrounded);
            }

            // Does this intersection define this angle bisector situation? That is, the bisector and base must align with the intersection
            if (!inter.ImpliesRay(ab.bisector))
            {
                return(newGrounded);
            }
            if (!inter.HasSegment(isoTri.baseSegment))
            {
                return(newGrounded);
            }

            List <GroundedClause> antecedent = new List <GroundedClause>();

            antecedent.Add(tri);
            antecedent.Add(ab);
            antecedent.Add(inter);

            // PerpendicularBisector(M, Segment(M, C), Segment(A, B))
            Strengthened newPerpB = new Strengthened(inter, new PerpendicularBisector(inter, ab.bisector));

            newGrounded.Add(new EdgeAggregator(antecedent, newPerpB, annotation));

            return(newGrounded);
        }
Пример #11
0
        public override ShapeBase Clone()
        {
            var shape = new IsoscelesTriangle
            {
                Location       = Location,
                Size           = Size,
                DrawMethod     = DrawMethod,
                OutlineColor   = OutlineColor,
                OutlineWidth   = OutlineWidth,
                FillColor      = FillColor,
                IsClosedFigure = IsClosedFigure,
                Vertices       = (VertexCollection)Vertices.Clone()
            };

            return(shape);
        }
        public static void Initialization_with_Apex_Coordinate_Creates_Shape()
        {
            IsoscelesTriangle triangle = new IsoscelesTriangle(triangleCoordinates[0]);

            Assert.AreEqual(GeometryLibrary.ZeroTolerance, triangle.Tolerance);

            Assert.AreEqual(3, triangle.Points.Count);
            Assert.AreEqual(triangleCoordinates[0].X, triangle.SideA.I.X);
            Assert.AreEqual(triangleCoordinates[0].Y, triangle.SideA.I.Y, Tolerance);
            Assert.AreEqual(triangleCoordinates[1], triangle.SideA.J);
            Assert.AreEqual(triangleCoordinates[1], triangle.SideB.I);
            Assert.AreEqual(triangleCoordinates[2], triangle.SideB.J);
            Assert.AreEqual(triangleCoordinates[2], triangle.SideC.I);
            Assert.AreEqual(triangleCoordinates[0].X, triangle.SideC.J.X);
            Assert.AreEqual(triangleCoordinates[0].Y, triangle.SideC.J.Y, Tolerance);

            Assert.AreEqual(3, triangle.Sides.Count);
            Assert.AreEqual(6, triangle.SideA.Length(), Tolerance);
            Assert.AreEqual(4, triangle.SideB.Length(), Tolerance);
            Assert.AreEqual(6, triangle.SideC.Length(), Tolerance);

            Assert.AreEqual(3, triangle.Angles.Count);
            Assert.AreEqual(70.52878175, triangle.AngleA.Degrees, Tolerance);
            Assert.AreEqual(38.94243649, triangle.AngleB.Degrees, Tolerance);
            Assert.AreEqual(70.52878175, triangle.AngleC.Degrees, Tolerance);

            Assert.AreEqual(5.65686, triangle.h, Tolerance);

            Assert.AreEqual(2, triangle.Centroid.X, Tolerance);
            Assert.AreEqual(1.885618333, triangle.Centroid.Y, Tolerance);

            Assert.AreEqual(2, triangle.OrthoCenter.X, Tolerance);
            Assert.AreEqual(0.707106687, triangle.OrthoCenter.Y, Tolerance);

            Assert.AreEqual(3.181980844, triangle.CircumRadius, Tolerance);
            Assert.AreEqual(2, triangle.CircumCenter.X, Tolerance);
            Assert.AreEqual(2.474874156, triangle.CircumCenter.Y, Tolerance);

            Assert.AreEqual(1.414213625, triangle.InRadius, Tolerance);
            Assert.AreEqual(2, triangle.InCenter.X, Tolerance);
            Assert.AreEqual(1.414213625, triangle.InCenter.Y, Tolerance);
        }
Пример #13
0
 public void Visit(IsoscelesTriangle triangle)
 {
     Console.WriteLine($"Isosceles triangle with leg={triangle.Leg} and base={triangle.Base} was drawn");
 }
Пример #14
0
 public double Visit(IsoscelesTriangle triangle)
 => 0.5 * triangle.Base * Math.Sqrt(Math.Pow(triangle.Leg, 2) - 0.25 * Math.Pow(triangle.Base, 2));
Пример #15
0
        public static List <FigSynthProblem> AddShape(Figure outerShape, ShapeType type)
        {
            List <FigSynthProblem> problems = new List <FigSynthProblem>();

            switch (type)
            {
            case ShapeType.TRIANGLE:
                problems.AddRange(Triangle.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.ISOSCELES_TRIANGLE:
                problems.AddRange(IsoscelesTriangle.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.RIGHT_TRIANGLE:
                problems.AddRange(RightTriangle.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;
            //case ShapeType.ISO_RIGHT_TRIANGLE:
            //    problems.AddRange(Triangle.AppendShape(points);

            case ShapeType.EQUILATERAL_TRIANGLE:
                problems.AddRange(EquilateralTriangle.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.KITE:
                problems.AddRange(Kite.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.QUADRILATERAL:
                problems.AddRange(Quadrilateral.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.TRAPEZOID:
                problems.AddRange(Trapezoid.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.ISO_TRAPEZOID:
                problems.AddRange(IsoscelesTrapezoid.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.PARALLELOGRAM:
                problems.AddRange(Parallelogram.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.RECTANGLE:
                problems.AddRange(Rectangle.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.RHOMBUS:
                problems.AddRange(Rhombus.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.SQUARE:
                problems.AddRange(Square.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.CIRCLE:
                problems.AddRange(Circle.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;

            case ShapeType.SECTOR:
                problems.AddRange(Sector.AppendShape(outerShape, outerShape.GetCompleteSideSegments()));
                break;
            }

            return(problems);
        }
Пример #16
0
        //
        // Given a set of points, can we construct any shape?
        // If we can construct a shape, we then have a resultant mess...
        //
        public static List <FigSynthProblem> SubtractShape(Figure outerShape, ShapeType type)
        {
            List <FigSynthProblem> problems = new List <FigSynthProblem>();
            List <Connection>      conns    = new List <Connection>();
            List <Point>           points   = new List <Point>();

            try
            {
                conns  = outerShape.MakeAtomicConnections();
                points = outerShape.allComposingPoints;
            } catch (Exception) { return(problems); }

            switch (type)
            {
            case ShapeType.TRIANGLE:
                problems = Triangle.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.ISOSCELES_TRIANGLE:
                problems = IsoscelesTriangle.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.RIGHT_TRIANGLE:
                problems = RightTriangle.SubtractShape(outerShape, conns, points);
                break;

            //case ShapeType.ISO_RIGHT_TRIANGLE:
            //    problems =  Triangle.SubtractShape(outerShape, conns, points);

            case ShapeType.EQUILATERAL_TRIANGLE:
                problems = EquilateralTriangle.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.KITE:
                problems = Kite.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.QUADRILATERAL:
                problems = Quadrilateral.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.TRAPEZOID:
                problems = Trapezoid.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.ISO_TRAPEZOID:
                problems = IsoscelesTrapezoid.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.PARALLELOGRAM:
                problems = Parallelogram.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.RECTANGLE:
                problems = Rectangle.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.RHOMBUS:
                problems = Rhombus.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.SQUARE:
                problems = Square.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.CIRCLE:
                problems = Circle.SubtractShape(outerShape, conns, points);
                break;

            case ShapeType.SECTOR:
                problems = Sector.SubtractShape(outerShape, conns, points);
                break;
            }

            return(problems);
        }
Пример #17
0
 public double Visit(IsoscelesTriangle triangle) => 2 * triangle.Leg + triangle.Base;
Пример #18
0
        public static List <EdgeAggregator> InstantiateTheorem(GroundedClause original, IsoscelesTriangle isoTri)
        {
            GeometricCongruentAngles newCongSegs = new GeometricCongruentAngles(isoTri.baseAngleOppositeLeg1, isoTri.baseAngleOppositeLeg2);

            List <GroundedClause> antecedent = Utilities.MakeList <GroundedClause>(original);

            return(Utilities.MakeList <EdgeAggregator>(new EdgeAggregator(antecedent, newCongSegs, annotation)));
        }
Пример #19
0
        private static List <EdgeAggregator> InstantiateDefinition(GroundedClause original, IsoscelesTriangle isoTri)
        {
            List <EdgeAggregator> newGrounded = new List <EdgeAggregator>();

            GeometricCongruentSegments gcs = new GeometricCongruentSegments(isoTri.leg1, isoTri.leg2);

            List <GroundedClause> antecedent = new List <GroundedClause>();

            antecedent.Add(original);

            newGrounded.Add(new EdgeAggregator(antecedent, gcs, annotation));

            return(newGrounded);
        }
Пример #20
0
        private void createCurrentShape()
        {
            switch (drawing)
            {
            case CurrentDrawing.Ellipse:
                Ellipse ellipse = new Ellipse();
                ellipse.setFillColor(this.currentFillColor);
                ellipse.setBorderColor(this.currentBorderColor);
                this.shape = ellipse;
                break;

            case CurrentDrawing.Circle:
                Circle circle = new Circle();
                circle.setFillColor(this.currentFillColor);
                circle.setBorderColor(this.currentBorderColor);
                this.shape = circle;
                break;

            case CurrentDrawing.Line:
                Shape line = new Line();
                line.setBorderColor(this.currentBorderColor);
                this.shape = line;
                break;

            case CurrentDrawing.Ray:
                Shape ray = new Ray();
                ray.setBorderColor(this.currentBorderColor);
                this.shape = ray;
                break;

            case CurrentDrawing.LineSegment:
                Shape lineSegment = new LineSegment();
                lineSegment.setBorderColor(this.currentBorderColor);
                this.shape = lineSegment;
                break;

            case CurrentDrawing.Poligon:
                Poligon poligon = new Poligon();
                poligon.setFillColor(this.currentFillColor);
                poligon.setBorderColor(this.currentBorderColor);
                this.shape = poligon;
                break;

            case CurrentDrawing.RegularPolygon:
                RegularPolygon regularPoligon = new RegularPolygon((int)this.numericUpDown1.Value);
                regularPoligon.setFillColor(this.currentFillColor);
                regularPoligon.setBorderColor(this.currentBorderColor);
                this.shape = regularPoligon;
                break;

            case CurrentDrawing.RightTriangle:
                RightTriangle rightTriangle = new RightTriangle();
                rightTriangle.setFillColor(this.currentFillColor);
                rightTriangle.setBorderColor(this.currentBorderColor);
                this.shape = rightTriangle;
                break;

            case CurrentDrawing.IsoscelesTriangle:
                IsoscelesTriangle isoscelesTriangle = new IsoscelesTriangle();
                isoscelesTriangle.setFillColor(this.currentFillColor);
                isoscelesTriangle.setBorderColor(this.currentBorderColor);
                this.shape = isoscelesTriangle;
                break;

            case CurrentDrawing.Parallelogram:
                Parallelogram parallelogram = new Parallelogram();
                parallelogram.setFillColor(this.currentFillColor);
                parallelogram.setBorderColor(this.currentBorderColor);
                this.shape = parallelogram;
                break;

            case CurrentDrawing.Rectangle:
                Rectangle rectangle = new Rectangle();
                rectangle.setFillColor(this.currentFillColor);
                rectangle.setBorderColor(this.currentBorderColor);
                this.shape = rectangle;
                break;

            case CurrentDrawing.Rhomb:
                Rhomb rhomb = new Rhomb();
                rhomb.setFillColor(this.currentFillColor);
                rhomb.setBorderColor(this.currentBorderColor);
                this.shape = rhomb;
                break;
            }
        }
        public AFigure Create(Point first, int n, Color color, Color fillColor, int thickness)
        {
            IsoscelesTriangle triangle = new IsoscelesTriangle(first, color, fillColor, thickness);

            return(triangle);
        }
Пример #22
0
        static void Main(string[] args)
        {
            //7-1 Shapes
            Circle shape = new Circle("circle", 4);

            Console.WriteLine(shape.GetName());
            Console.WriteLine(Math.Round(shape.GetArea(), 2));
            IsoscelesTriangle it = new IsoscelesTriangle("triangle", 4, 2);

            Console.WriteLine(it.GetName());
            Console.WriteLine(it.GetArea());
            Console.ReadLine();

            //6 Matrix
            //const int size = 2;
            //const int size2 = 2;
            //Matrix m = new Matrix(size);
            //Matrix n = new Matrix(size);
            //for (int i = 0; i < size; i++)
            //{
            //    for (int j = 0; j < size; j++)
            //    {
            //        m[i, j] = rand.Next(10);
            //        n[i, j] = rand.Next(10);
            //    }
            //}
            //m.Print();
            //Console.WriteLine();
            //n.Print();
            //Console.WriteLine();
            //m.Multiply(n).Print();
            //Console.ReadLine();

            //5-2 Polynom
            //const int degree1 = 3;
            //const int degree2 = 2;
            //int[] poly1 = new int[degree1 + 1] { 3, 6, 0, 2 }; //from junior to senior so the index is becoming a degree
            //int[] poly2 = new int[degree2 + 1] { 1, 0, 1 };
            //Polynom p = new Polynom(degree1, poly1);
            //Polynom m = new Polynom(degree2, poly2);
            //p.Multiply(2);
            //p.Multiply(m);
            //Console.WriteLine(p.WritePol());
            //Console.ReadLine();

            //5-1 Array
            //Console.WriteLine("Array");
            //int n = 5, low = 11;
            //RArray a = new RArray(n, low);
            //for (int i = low - 1; i <= low + n; i++)
            //{
            //    try
            //    {
            //        a[i] = 1;
            //        Console.WriteLine("a["+i+"] = "+a[i]);
            //    }
            //    catch (IndexOutOfRangeException)
            //    {
            //        Console.WriteLine("out of range");
            //    }
            //}
            //Console.ReadLine();

            //4-2 Arithmetic progression
            //Console.WriteLine("Arithmetic progression");
            //ArProgression arith = new ArProgression(4, 2);
            //Console.WriteLine(arith.GetNItem(10));
            //Console.WriteLine(arith.GetSum(10));
            //Console.WriteLine(arith.GetAverage(10));
            //Console.ReadLine();

            //4-1 Quadrate
            //Console.WriteLine("Quadrate");
            //Quadrate quadr = new Quadrate(4);
            //Console.WriteLine(quadr.Area());
            //Console.WriteLine(quadr.Perimeter());
            //Console.ReadLine();
        }
        //
        // IsoscelesTriangle(A, B, C),
        // AngleBisector(Segment(M, C), Angle(A, C, B)),
        // Intersection(M, Segment(M, C), Segment(A, B) -> PerpendicularBisector(M, Segment(M, C), Segment(A, B)),
        //
        //   A _____M_____B
        //     \    |    /
        //      \   |   /
        //       \  |  /
        //        \ | /
        //         \|/
        //          C
        //
        public static List <EdgeAggregator> Instantiate(GroundedClause c)
        {
            annotation.active = EngineUIBridge.JustificationSwitch.ANGLE_BISECTOR_IS_PERPENDICULAR_BISECTOR_IN_ISOSCELES;

            List <EdgeAggregator> newGrounded = new List <EdgeAggregator>();

            if (!(c is Strengthened) && !(c is IsoscelesTriangle) && !(c is AngleBisector) && !(c is Intersection))
            {
                return(newGrounded);
            }

            if (c is IsoscelesTriangle)
            {
                IsoscelesTriangle isoTri = c as IsoscelesTriangle;

                foreach (AngleBisector ab in candidateBisectors)
                {
                    foreach (Intersection inter in candidateIntersections)
                    {
                        newGrounded.AddRange(GeneratePerpendicularBisector(isoTri, ab, inter));
                    }
                }

                candidateIsosceles.Add(isoTri);
            }
            else if (c is Strengthened)
            {
                Strengthened streng = c as Strengthened;

                // We are not interested if the strengthened clause is not Isosceles (note, this includes equilateral)
                if (!(streng.strengthened is IsoscelesTriangle))
                {
                    return(newGrounded);
                }

                foreach (AngleBisector ab in candidateBisectors)
                {
                    foreach (Intersection inter in candidateIntersections)
                    {
                        newGrounded.AddRange(GeneratePerpendicularBisector(streng, ab, inter));
                    }
                }

                candidateStrengthened.Add(streng);
            }
            else if (c is Intersection)
            {
                Intersection newIntersection = c as Intersection;

                foreach (IsoscelesTriangle isoTri in candidateIsosceles)
                {
                    foreach (AngleBisector ab in candidateBisectors)
                    {
                        newGrounded.AddRange(GeneratePerpendicularBisector(isoTri, ab, newIntersection));
                    }
                }

                candidateIntersections.Add(newIntersection);
            }
            else if (c is AngleBisector)
            {
                AngleBisector newAB = c as AngleBisector;

                foreach (IsoscelesTriangle isoTri in candidateIsosceles)
                {
                    foreach (Intersection inter in candidateIntersections)
                    {
                        newGrounded.AddRange(GeneratePerpendicularBisector(isoTri, newAB, inter));
                    }
                }

                candidateBisectors.Add(newAB);
            }

            return(newGrounded);
        }