Ok, I'm sure this has been covered before, but I can't find a solution, so here's my question;
I want to rotate some points around a fixed central point. If I use angle & distance I can make it work easily - like this;
...but I don't want to use angle & distance - I want to use x & y coordinates, like in the following example. I realised I needed distance, so I'm inserting it into the type, to help me rotate the points, but I only need the x & y coordinates for the rest of the program.
Well, it's rotating - but not as it should. Something is wrong - I can't get the circles to rotate around the centre and I can't figure out what's wrong.
Can someone help?
Thanks.
I want to rotate some points around a fixed central point. If I use angle & distance I can make it work easily - like this;
Graphics 640,480,16,2 SetBuffer BackBuffer() SeedRnd (MilliSecs()) Origin 320,240 Type StarField Field distance Field angle End Type For a=1 To 100 ;Generate a bunch of positions b.StarField = New StarField b\angle = Rand(0,359) b\distance = Rand(20,700) Next Function Draw() For a.StarField= Each StarField x# = a\distance * Cos( a\angle ) y# = a\distance * Sin( a\angle ) Oval x#,y#,10,10,0 Next End Function ;Mainloop While Not KeyHit(1) Cls For b.StarField= Each StarField b\angle=b\angle-1 Next Draw() Oval 0,0,10,10,1 ;This is what we rotate around Flip Wend
...but I don't want to use angle & distance - I want to use x & y coordinates, like in the following example. I realised I needed distance, so I'm inserting it into the type, to help me rotate the points, but I only need the x & y coordinates for the rest of the program.
Well, it's rotating - but not as it should. Something is wrong - I can't get the circles to rotate around the centre and I can't figure out what's wrong.
Can someone help?
Graphics 640,480,16,2 SetBuffer BackBuffer() Origin 320,240 Type StarField Field x# Field y# Field Distance# End Type Function Dist(x1#, y1#, x2#, y2#) Return Sqr( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)) End Function For a=1 To 100 ;Generate a bunch of positions b.StarField= New StarField x0 = Rand(-500,500) y0 = Rand(-500,500) b\x# = x0 b\y# = y0 b\Distance# = Dist(0,0,x0,y0) ;Store distance from centerpoint. Next Function Draw() For s.StarField= Each StarField dx# = s\x# dy# = s\y# x# = dx#+(Cos#(angle) * s\Distance#) y# = dy#+(Sin#(angle) * s\Distance#) Oval x#,y#,10,10,0 Plot dx,dy ;Positions stored in types (for comparison) Next End Function ;Mainloop Global Angle=0 While Not KeyHit(1) Cls Draw() Oval 0,0,10,10,1 ;This is our center spot angle=angle+1 If angle=360 Then angle=0 Flip Wend
Thanks.