private List <PerimeterLineSegment> AdjustSegments(Point2D cen)
        {
            List <PerimeterLineSegment> movedSegments = new List <PerimeterLineSegment>();

            foreach (var s in Segments)
            {
                PerimeterLineSegment adjustedSeg = new PerimeterLineSegment(
                    new Point2D(s.PointI.X + cen.X, s.PointI.Y + cen.Y),
                    new Point2D(s.PointJ.X + cen.X, s.PointJ.Y + cen.Y)
                    );
                movedSegments.Add(adjustedSeg);
            }


            if (this.ColumnType == PunchingPerimeterConfiguration.CornerLeftBottom ||
                this.ColumnType == PunchingPerimeterConfiguration.CornerLeftTop ||
                this.ColumnType == PunchingPerimeterConfiguration.CornerRightBottom ||
                this.ColumnType == PunchingPerimeterConfiguration.CornerRightTop
                )
            {
                double J_x_bar  = GetJx(movedSegments);
                double J_y_bar  = GetJy(movedSegments);
                double J_xy_bar = GetJxy(movedSegments);

                //421.1R-13 Equation (B-10)
                double theta = Math.Atan(-2.0 * J_xy_bar / (J_x_bar - J_y_bar));

                //Calculate rotated coordinates per B-12 and B-13
                List <PerimeterLineSegment> rotatedSegments = new List <PerimeterLineSegment>();
                foreach (var s in movedSegments)
                {
                    PerimeterLineSegment rotatedSeg = new PerimeterLineSegment(
                        new Point2D(s.PointI.X * Math.Cos(theta) + s.PointI.Y * Math.Sin(theta), -s.PointI.X * Math.Sin(theta) + s.PointI.Y * Math.Cos(theta)),
                        new Point2D(s.PointJ.X * Math.Cos(theta) + s.PointJ.Y * Math.Sin(theta), -s.PointJ.X * Math.Sin(theta) + s.PointJ.Y * Math.Cos(theta))
                        );
                    rotatedSegments.Add(rotatedSeg);
                }

                return(rotatedSegments);
            }
            else
            {
                return(movedSegments);
            }
        }
        private List<PerimeterLineSegment> AdjustSegments(Point2D cen)
        {
            List<PerimeterLineSegment> movedSegments = new List<PerimeterLineSegment>();
            foreach (var s in Segments)
            {

                PerimeterLineSegment adjustedSeg = new PerimeterLineSegment(
                    new Point2D(s.PointI.X+cen.X, s.PointI.Y+cen.Y),
                    new Point2D(s.PointJ.X + cen.X, s.PointJ.Y + cen.Y)
                    );
                movedSegments.Add(adjustedSeg);
            }


            if (this.ColumnType== PunchingPerimeterConfiguration.CornerLeftBottom ||
                this.ColumnType== PunchingPerimeterConfiguration.CornerLeftTop ||
                this.ColumnType== PunchingPerimeterConfiguration.CornerRightBottom ||
                this.ColumnType== PunchingPerimeterConfiguration.CornerRightTop
                )
            {
                double J_x_bar = GetJx  (movedSegments);
                double J_y_bar = GetJy  (movedSegments);
                double J_xy_bar = GetJxy(movedSegments);

                //421.1R-13 Equation (B-10)
                double theta = Math.Atan(-2.0 * J_xy_bar / (J_x_bar - J_y_bar));

                //Calculate rotated coordinates per B-12 and B-13
                List<PerimeterLineSegment> rotatedSegments = new List<PerimeterLineSegment>();
                foreach (var s in movedSegments)
                {
                    PerimeterLineSegment rotatedSeg = new PerimeterLineSegment(
                    new Point2D(s.PointI.X * Math.Cos(theta) + s.PointI.Y * Math.Sin(theta), -s.PointI.X * Math.Sin(theta) + s.PointI.Y * Math.Cos(theta)),
                    new Point2D(s.PointJ.X * Math.Cos(theta) + s.PointJ.Y * Math.Sin(theta), -s.PointJ.X * Math.Sin(theta) + s.PointJ.Y * Math.Cos(theta))
                    );
                    rotatedSegments.Add(rotatedSeg);
                }

                return rotatedSegments;
            }
            else
            {
                return movedSegments;
            }

        }