private List <PerimeterLineSegment> GetRotatedSegments(List <PerimeterLineSegment> adjustedSegments, double thetaRad) { List <PerimeterLineSegment> RotatedSegments = new List <PerimeterLineSegment>(); if (ColumnType == PunchingPerimeterConfiguration.CornerLeftBottom || ColumnType == PunchingPerimeterConfiguration.CornerLeftTop || ColumnType == PunchingPerimeterConfiguration.CornerRightBottom || ColumnType == PunchingPerimeterConfiguration.CornerRightTop) { List <PerimeterLineSegment> RotatedSegmentsInLocalAxis = new List <PerimeterLineSegment>(); foreach (var seg in adjustedSegments) { Point2D pi = GetRotatedPoint(seg.PointI, thetaRad); Point2D pj = GetRotatedPoint(seg.PointJ, thetaRad); PerimeterLineSegment newSeg = new PerimeterLineSegment(pi, pj); RotatedSegments.Add(newSeg); //flip X and Y coordinates } } else { RotatedSegments = adjustedSegments; } return(RotatedSegments); }
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); } }