Polygon rotation is too fast compared to objects rotation
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.
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.
Yeah, that wasn't intended as a fix. Just a more complete solution for rotating something into range without modulation.
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.
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
And the rotation code.
thanks everyone for the help and forgive my idiocy for not noticing they were they same instead of being seperate.
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
Popular Topics
Advertisement