# Polygon rotation is too fast compared to objects rotation

This topic is 1879 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

They both recieve the same mDegree value.

Could it be something with the way i move the degree past 0?

 if(mDegree > 360) { mDegree = 0; } else if(mDegree < 0) { mDegree = 360; } 

##### Share on other sites
Does the SpriteBatch draw method deffinitely take the angle in degrees and not radians?

Could you show us how SpriteBatch uses mDegree?

Is this the same SpriteBatch method as referred to here?

On second thoughts I see that is a different SpriteBatch Edited by de_mattT

##### Share on other sites
This method is better for fixing the degree but it didnt change the behavior that I am experiencing

 if(mDegree >= 360) { mDegree -= 360; } else if(mDegree < 0) { mDegree += 360; } 

##### Share on other sites
Is this a funciton you've defined yourself "Utilities.toRadians()"? If so can you post the code?
Is there a reason why you aren't using "Math.toRadians()"?

##### Share on other sites
Does SpriteBatch::draw() want degrees or radians? Edited by Khatharr

##### Share on other sites

This method is better for fixing the degree but it didnt change the behavior that I am experiencing

 if(mDegree >= 360) { mDegree -= 360; } else if(mDegree < 0) { mDegree += 360; } 

Try:
[source lang="java"]
while(mDegree >= 360) {mDegree -= 360;}
while(mDegree < 0) {mDegree += 360;}
[/source]

Edit - Aagh, derp. Sorry for double post. Edited by Khatharr

##### Share on other sites

Does SpriteBatch::draw() want degrees or radians?

Degrees

##### Share on other sites

while(mDegree >= 360) {mDegree -= 360;}
while(mDegree < 0) {mDegree += 360;}

Didnt fix it. I know it has to be something wrong with the polygone rotation, its not working correctly. Ive stared at it for hours and i dont know what the problem is. Ive checked several places and the algorithm seems to be correct, but its not rotating correctly.

##### Share on other sites
Okay, looking back over the whole thread, can you post the whole code path for this thing? Seems like it'll be faster than everyone guessing at it.

Didnt fix it. I know it has to be something wrong with the polygone rotation, its not working correctly. Ive stared at it for hours and i dont know what the problem is. Ive checked several places and the algorithm seems to be correct, but its not rotating correctly.

Yeah, that wasn't intended as a fix. Just a more complete solution for rotating something into range without modulation. Edited by Khatharr

##### Share on other sites
Ive rechecked everything... The rotation code was the problem.... I made two lists to keep track of the points... the original points and the rotated points. Both were pointing to the same object, i thought they were seperate, but they were not... so I just made both lists create a new point when adding to the list. The rotation is now correct.

Here is the polygon constructor

 public Polygon(Point... points) { if(points.length < 3) { throw new IllegalArgumentException("polygons must contain at least 3 points."); } for(Point p : points) { mRotatedPoints.add(new Point(p)); mOriginalPoints.add(new Point(p)); } } 

And the rotation code.

 public void rotate(float x0, float y0, float degree) { for(int i = 0; i < mOriginalPoints.size(); i++) { Point point = mOriginalPoints.get(i); float x = (float) (x0 + (point.x - x0) * Math.cos(Utilities.toRadians(degree)) - (point.y - y0) * Math.sin(Utilities.toRadians(degree))); float y = (float) (y0 + (point.x - x0) * Math.sin(Utilities.toRadians(degree)) + (point.y - y0) * Math.cos(Utilities.toRadians(degree))); Point p = mRotatedPoints.get(i); p.x = x; p.y = y; } 

thanks everyone for the help and forgive my idiocy for not noticing they were they same instead of being seperate. Edited by manderin87