描画面として機能するJPanelを持つJavaSwingアプリケーションを実装しています。サーフェスは(アクティブな)さまざまな要素をレンダリングします。各要素には独自の形状と、レンダリングと衝突検出に使用されるアフィン変換があります(各要素はローカル座標で描画され、openglのようにアフィン変換で変換されます)。
要素はサーフェス上で移動および回転できます(これは変換によって行われます)。変換が適用されるたびに、形状と変換を使用してAreaオブジェクトが作成されます(正確な衝突検出のため)。
問題は、要素を(45度)回転させてから10ピクセル移動した場合です。それを動かすと、要素は私が望まない回転方向に動きます。
これを克服する簡単な方法はありますか?
(私の説明が十分でない場合は、いくつかのサンプルコードを投稿します)。
編集:
class Element
{
private AffineTransform transform = new AffineTransform();
private Shape shape = new Rectangle(0,0,100,100);
private Area boundingBox;
public void onMouseDrag(MouseEvent e)
{
translate(dx,dy); // dx,dy are calculated from event
}
public void onMouseMove(MouseEvent e)
{
rotate(Math.atan2(dx/dy); // dx,dy are calculated from event
}
public void translate(int dx,int dy)
{
transform.translate(dx,dy);
boundingBox = new Area(shape);
boundingBox.transform(transform);
}
public void rotate(double angle)
{
transform.rotate(Math.toRadians(angle));
boundingBox = new Area(shape);
boundingBox.transform(transform);
}
public void draw(Graphics2D g2d)
{
g2d.setTransform(transform);
g2d.draw(shape);
...
}
}