private static LineSegment RotatedAndRescaled(this LineSegment segment, LineSegment origCntrLineSegment, LineSegment newCntrLineSegment) { float ratio = newCntrLineSegment.Length / origCntrLineSegment.Length; Point newOrigPoint = newCntrLineSegment.PartPoint(origCntrLineSegment.PartPointLocation(segment.OriginPoint)); float angle = origCntrLineSegment.AngleBetween(segment); return(new LineSegment(newOrigPoint, segment.DirectionVector.Rotated(angle), ratio * segment.Length)); }