1
    AffineTransform at;
    Graphics2D g2 = (Graphics2D)g;

    g2.setColor(Color.black);

    at = new AffineTransform();
    at.setToTranslation(x, y);
    at.setToRotation(theta);
    g2.setTransform(at);
    g2.drawPolygon(points);

私のコードは x と y に三角形を描画します...そして、a と d を押すと三角形が回転します..しかし、w と s を押すと、三角形は x と y を変更しません。

変数は正しいです..それは翻訳ルーチンです..どこで間違ったのかわかりません..

私がこれを行う場合:

    AffineTransform at;
    Graphics2D g2 = (Graphics2D)g;

    g2.setColor(Color.black);

    at = new AffineTransform();
    at.setToTranslation(x, y);
    g2.setTransform(at);
    g2.drawPolygon(points);

    at.setToRotation(theta);
    g2.setTransform(at);
    g2.drawPolygon(points);

1 つは回転し、もう 1 つは移動します。では、描画する前に両方の平行移動を適用できないのはなぜですか?

4

3 に答える 3

0

オラクルのドキュメントから:

座標変換を追加するには、変換、回転、スケーリング、またはせん断メソッドを使用します。setTransform メソッドは、レンダリング後に元の Graphics2D 変換を復元することのみを目的としています。

たとえば、rotate メソッドの新しい変換を連結できる変換は 1 つだけです。

現在の Graphics2D Transform を変換された回転変換と連結します。後続のレンダリングは、指定された位置に移動し、指定されたラジアンで回転し、元の移動と同じ量だけ逆に移動することによって構築される変換によって変換されます。

警告もあります:

警告: Graphics2D には、Swing コンポーネントのレンダリングや解像度を調整するためのスケーリング変換の適用など、他の目的に必要な変換が既に含まれている可能性があるため、既存の変換の上に新しい座標変換を適用するために、このメソッドを使用しないでください。プリンターの。

于 2012-10-02T19:18:36.013 に答える
0

両方の変換を単一の AffineTransformation に連結する必要があると思います。

すなわち

AffineTransform at, toConcatenate;
Graphics2D g2 = (Graphics2D)g;

g2.setColor(Color.black);

at = new AffineTransform();
toConcatenate = new AffineTransform();

at.setToTranslation(x,y);
toConcatenate.setToRotation(theta);
at.concatenate(toConcatenate);
g2.setTransform(at)
g2.drawPolygon(points);

これの多くは、 http: //docs.oracle.com/javase/tutorial/2d/advanced/transforming.html の Oracle サイトにあるチュートリアルに基づいています。

コードが機能しない理由は、「setTransform メソッドが Graphics2D オブジェクトの現在の変換を上書きする」ためだと思います。2 つを連結するのではなく、最初の変換を 2 番目の変換で上書きしています。

お役に立てれば

于 2012-10-02T19:58:55.120 に答える
0
    AffineTransform at;
    Graphics2D g2 = (Graphics2D)g;

    g2.setColor(Color.black);

    at = new AffineTransform();

    at.translate(x, y);     
    at.rotate(theta);
    g2.setTransform(at);
    g2.drawPolygon(points);

私は間違ったものを使用していました..回転と翻訳は私が必要としていた機能です。

于 2012-10-02T23:12:49.543 に答える