Polygon rotation is too fast compared to objects rotation

Started by
35 comments, last by manderin87 11 years, 4 months ago
Its the same thing... my Utilities.toRadians() calls Math.toRadians()
Advertisement
Does SpriteBatch::draw() want degrees or radians?
void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.

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.
void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.

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


Degrees

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.
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.
void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.
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.

This topic is closed to new replies.

Advertisement