1

現在のg2dオブジェクトに回転を適用しようとすると、回転せず、同じ場所にレンダリングされます(私のコンテキストでは、他のオブジェクトの上に)。回転メソッドについて私が理解していることから、現在のグラフィックス コンテキストに変換を適用し、その後に続くレンダリングのピクセルを変換します (これが間違っている可能性があります)。問題のコードは次のとおりです。

@Override
  public void paint(final Graphics graphics) {
    super.paint(graphics);
    final Graphics2D g2d = (Graphics2D) graphics;
    ....
    ....
    g2d.setColor(Color.RED);
    g2d.setStroke(new BasicStroke(SMALL_LINE_THICKNESS));
    if (isLattice1Drawn) {
      g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1));
      // lattice1 and lattice2 are Polygon objects
      g2d.draw(lattice1);
      // This fades in the second Polygon over the first
      g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
      // This line should rotate it, but doesn't
      g2d.rotate(Math.toRadians(210));
      g2d.draw(lattice2);
      .....

ありがとう、マイク

編集 1 ジェフからの提案として、回転とペイントでの描画だけを試してみたところ、次のコードが残りました。

@Override
public void paint(final Graphics graphics) {
  super.paint(graphics);
  final Graphics2D g2d = (Graphics2D) graphics;
  g2d.rotate(Math.toRadians(210));
  g2d.draw(lattice2);
  return;
  // Rest of paint .................

残念ながら、これは役に立ちませんでした。他の提案は大歓迎です。

編集 2: 回転を呼び出さないと、ポリゴンがレンダリングされますが、何もしないと何も起こりません。誰でもこれを説明できますか?

4

1 に答える 1

3

Edit 2から私が理解しているのは、回転が実際に機能するということです。ただし、回転は原点を中心に行われるため、ポリゴンの回転された座標は表示領域の外側になります。これをテストするには、回転角度を小さくします。

次に、目的の操作が重心の周りでポリゴンを回転させることである場合は、代わりに次の Graphics2D メソッドを使用します。

void rotate(double theta, double x, double y) 
于 2012-07-18T17:25:52.763 に答える