Quote Originally Posted by .paul. View Post
Problem resolved... I managed to get myself tied up in point arrays. Didn't realise i already had the answer

Code:
Public Shared Function PlusNinety(ByVal p() As Point) As Point()
    Dim newPoints() As Point = Array.ConvertAll(p, Function(pt) New Point(-pt.Y, pt.X))
    Dim o As Integer = newPoints.Min(Function(pt2) pt2.X)
    Return Array.ConvertAll(newPoints, Function(pt) New Point(pt.X - o, pt.Y))
End Function

Public Shared Function MinusNinety(ByVal p() As Point) As Point()
    Dim newPoints() As Point = Array.ConvertAll(p, Function(pt) New Point(pt.Y, -pt.X))
    Dim o As Integer = newPoints.Min(Function(pt2) pt2.Y)
    Return Array.ConvertAll(newPoints, Function(pt) New Point(pt.X, pt.Y - o))
End Function

Public Shared Function PlusOneEighty(ByVal p() As Point) As Point()
    Dim o As Integer = p.Max(Function(pt2) pt2.Y)
    Return Array.ConvertAll(p, Function(pt) New Point(pt.X, o - pt.Y))
End Function
Do you think making these extension methods will make the code more clean? (sorry to rename your function names but for me digits are more readable )

VB.NET Code:
  1. p1.Rotate180()
  2. p2.RotateMinus90()
  3. p3.RotatePlus90()

Code:
Imports System.Runtime.CompilerServices

Module PointsArrayExtensions

<Extension()>
Public Function RotatePlus90(ByVal p() As Point) As Point()
    Dim newPoints() As Point = Array.ConvertAll(p, Function(pt) New Point(-pt.Y, pt.X))
    Dim o As Integer = newPoints.Min(Function(pt2) pt2.X)
    Return Array.ConvertAll(newPoints, Function(pt) New Point(pt.X - o, pt.Y))
End Function

<Extension()>
Public Shared Function RotateMinus90(ByVal p() As Point) As Point()
    Dim newPoints() As Point = Array.ConvertAll(p, Function(pt) New Point(pt.Y, -pt.X))
    Dim o As Integer = newPoints.Min(Function(pt2) pt2.Y)
    Return Array.ConvertAll(newPoints, Function(pt) New Point(pt.X, pt.Y - o))
End Function

<Extension()>
Public Function Rotate180(ByVal p() As Point) As Point()
    Dim o As Integer = p.Max(Function(pt2) pt2.Y)
    Return Array.ConvertAll(p, Function(pt) New Point(pt.X, o - pt.Y))
End Function

End Module