-
Aug 24th, 2021, 04:31 AM
#1
[RESOLVED] Rotating an array of points clockwise 90, 180, and 270 degrees
I have an array of points that draws a polygon in a vertical position (All of the X and Y values are positive)...
Code:
Dim points21x22() As Point = New Point() {New Point(10, 0), New Point(15, 3), New Point(18, 5), New Point(20, 8), _
New Point(20, 39), New Point(17, 42), New Point(3, 42), New Point(0, 39), _
New Point(0, 8), New Point(2, 5), New Point(5, 3), New Point(10, 0)}
I can rotate this array 90 degrees clockwise...
Code:
Dim newPoints() As Point = Array.ConvertAll(points21x22, Function(pt) New Point(-pt.Y, pt.X))
But this results in negative values in the X coordinate which messes with my offsetting.
I can fix my offsetting...
Code:
Dim o As Integer = newPoints.Min(Function(pt2) pt2.X)
newPoints = Array.ConvertAll(newPoints, Function(pt) New Point(pt.X - o, pt.Y))
But this still gives an array with some negative X values.
Can someone explain how to rotate my polygons so that all of the point values are positive?, and also if this code...
Code:
Dim newPoints() As Point = Array.ConvertAll(points21x22, Function(pt) New Point(pt.Y, -pt.X))
Will rotate 90 degrees anticlockwise? And also, will this rotate by 180 degrees?...
Code:
Dim newPoints() As Point = Array.ConvertAll(points21x22, Function(pt) New Point(pt.Y, pt.X))
- Coding Examples:
- Features:
- Online Games:
- Compiled Games:
-
Aug 24th, 2021, 04:57 AM
#2
Re: Rotating an array of points clockwise 90, 180, and 270 degrees
What are you actually trying to rotate around? I would think that the thing to do would be to determine your point of rotation, convert each point to polar coordinates relative to that, increase or decrease the angle as appropriate and then convert back to Cartesian coordinates.
-
Aug 24th, 2021, 05:06 AM
#3
Re: Rotating an array of points clockwise 90, 180, and 270 degrees
That makes some sense. The array starts at 10, 0. If I subtract 10 from each of the X values, rotate using the methods I mentioned, then add 10 to each of the X values, is that right? I’m not at my computer right now.
- Coding Examples:
- Features:
- Online Games:
- Compiled Games:
-
Aug 24th, 2021, 05:12 AM
#4
Re: Rotating an array of points clockwise 90, 180, and 270 degrees
I’ll post a diagram showing what it starts at, and what it is supposed to be transformed to…
- Coding Examples:
- Features:
- Online Games:
- Compiled Games:
-
Aug 24th, 2021, 06:42 AM
#5
Re: [RESOLVED] Rotating an array of points clockwise 90, 180, and 270 degrees
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
- Coding Examples:
- Features:
- Online Games:
- Compiled Games:
-
Aug 24th, 2021, 06:52 AM
#6
Re: [RESOLVED] Rotating an array of points clockwise 90, 180, and 270 degrees
Originally Posted by .paul.
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:
p1.Rotate180()
p2.RotateMinus90()
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
-
Aug 24th, 2021, 07:43 AM
#7
Re: [RESOLVED] Rotating an array of points clockwise 90, 180, and 270 degrees
Originally Posted by peterst
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:
p1.Rotate180()
p2.RotateMinus90()
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
I considered making them extension methods. At this point in my project, i'm focusing on GUI functionality issues. I might come back to these functions later...
- Coding Examples:
- Features:
- Online Games:
- Compiled Games:
-
Aug 24th, 2021, 06:40 PM
#8
Re: [RESOLVED] Rotating an array of points clockwise 90, 180, and 270 degrees
Originally Posted by .paul.
I considered making them extension methods. At this point in my project, i'm focusing on GUI functionality issues. I might come back to these functions later...
I am thinking of methods naming as most of time bad naming makes my code unclear of the real intent. Probably RotateLeft/RotateRight or RotateCW/RotateCCW (may include 90 as degrees) are more appropriate names. I am really interested what you think and what you will use as names as all these sound ok but in code they may look weird when time passes and you read what you did. I had few db fields and procedures renaming few hours ago to suit better the global purpose of my app but right now I found it is still not perfect for future readability and easy understanding what is done (event sourced systems are pain to get naming right).
-
Aug 26th, 2021, 09:23 AM
#9
Re: [RESOLVED] Rotating an array of points clockwise 90, 180, and 270 degrees
I should point out, my plusOneEighty method isn’t actually a rotation of 180 degrees. It’s a flip horizontal mirror of the original points. This works ok for me, as my points are symmetrical…
- Coding Examples:
- Features:
- Online Games:
- Compiled Games:
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|