Sign in to follow this  
manderin87

Polygon rotation is too fast compared to objects rotation

Recommended Posts

manderin87    130
They both recieve the same mDegree value.

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

[CODE]
if(mDegree > 360) {
mDegree = 0;
} else if(mDegree < 0) {
mDegree = 360;
}
[/CODE]

Share this post


Link to post
Share on other sites
de_mattT    308
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?
http://tylerforsythe.com/2011/11/xna-spritebatch-draw-and-icecream-use-a-rotation-value-in-radians/

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

Share this post


Link to post
Share on other sites
manderin87    130
the draw method i use is above, but spritebatch deffinitely uses degrees

its located here [url="https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/SpriteBatch.java"]https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/SpriteBatch.java[/url]

Share this post


Link to post
Share on other sites
manderin87    130
This method is better for fixing the degree but it didnt change the behavior that I am experiencing

[CODE]
if(mDegree >= 360) {
mDegree -= 360;
} else if(mDegree < 0) {
mDegree += 360;
}
[/CODE]

Share this post


Link to post
Share on other sites
de_mattT    308
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 this post


Link to post
Share on other sites
Khatharr    8812
[quote name='manderin87' timestamp='1354232099' post='5005498']
This method is better for fixing the degree but it didnt change the behavior that I am experiencing

[CODE]
if(mDegree >= 360) {
mDegree -= 360;
} else if(mDegree < 0) {
mDegree += 360;
}
[/CODE]
[/quote]

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 this post


Link to post
Share on other sites
manderin87    130
[quote name='Khatharr' timestamp='1354244657' post='5005545']
while(mDegree >= 360) {mDegree -= 360;}
while(mDegree < 0) {mDegree += 360;}
[/quote]

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 this post


Link to post
Share on other sites
Khatharr    8812
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.

[quote name='manderin87' timestamp='1354245110' post='5005548']
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.
[/quote]

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

Share this post


Link to post
Share on other sites
manderin87    130
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

[CODE]
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));
}
}
[/CODE]

And the rotation code.

[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;
}
[/CODE]

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this