다각형을 사용하여 몇 가지 테스트를하고 있습니다. 회전하는 동안 문제가 발생했습니다. 문제는 다각형이 회전 할 때 움직이는 것처럼 보이고 결국 화면 밖으로 튀어 나오는 문제입니다. 나는 그들을 회전시키기 위해 AffineTransform을 사용하고 있었고, 움직이지 않아야하므로 그들을 번역하지 않았습니다. 다음은 코드입니다 :회전하는 동안 다각형이 이동합니다.
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
public class PhysicsProp {
Point2D[] OriginalPoints;
Point2D[] NewPoints = OriginalPoints;
int X;
int Y;
double rotation = 0.0;
public PhysicsProp(Point2D[] Points){
OriginalPoints = Points;
NewPoints = Points;
}
public Polygon PointsToPoly(Point2D[] Points){
Polygon p = new Polygon();
for (int i = 0; i < Points.length; i++){
p.addPoint((int) Points[i].getX(), (int) Points[i].getY());
}
return p;
}
public void rotateModel(double theta){
AffineTransform.getRotateInstance(Math.toDegrees(theta), PointsToPoly(NewPoints).getBounds().getCenterX(), PointsToPoly(NewPoints).getBounds().getCenterY()).transform(OriginalPoints, 0, NewPoints, 0, OriginalPoints.length);
}
public Polygon getModel(){
return PointsToPoly(NewPoints);
}
public void setModel(Point[] points){
OriginalPoints = points;
}
public Rectangle getBounds(){
return PointsToPoly(NewPoints).getBounds();
}
}
내가 실제로이 코드로 잘못 무슨 일이 일어나고 있는지 알고 싶습니다, 내가 (회전 다각형)을 달성하기 위해 노력하고있어 주위에 더 좋은 방법이 있다면. 다음은 다각형을 렌더링하고 회전하는 위치입니다.
g2.setColor(Color.pink);
for (PhysicsProp p : CurrentLevel.PhysicsObjects){
g2.drawPolygon(p.PointsToPoly(p.NewPoints));
p.rotateModel(0.001);
}
어떤 도움을 주셔서 감사합니다!
다각형의 중심점은 무엇입니까? –
다각형의 중심점 캐싱을 시도하고 항상 캐시 된 점을 회전 할 지점으로 사용하십시오. 임의의 회전에서 임의의 다각형에 대해 동일한 정확한 X/Y 중심점을 계산하므로 위험 (및 CPU주기)을 제거하고 한 번 캐시 한 다음 다시 사용하면됩니다. – Tim
+1 @Tim (답변으로 게시해야하는 사람). 끊임없이 회전하여 중심을 다시 계산하면 반올림/정밀도 오류로 인해 중심이 표류합니다. 또는 현재 변환을 저장하고 회전 할 때마다 점진적으로 변환을 업데이트하면 한 번에 한 단계 씩 모델을 수정하는 대신 원본 모델에 완전히 업데이트 된 변환을 적용 할 수 있습니다. –