0

頭と片腕と体を手に入れました。同じ最初の 2 つの座標を使用して別の腕を作成しようとしています。これは頭の下部から始まりますが、最後の 2 つの座標は負の値 (ただし同じ数) です。ネガティブバージョンを作れば、ラインの反対バージョンになるだけだと思っていました。代わりに、まっすぐ上に突き出ています。なぜこれが起こっているのか混乱しています。

import javax.swing.JComponent;
import java.awt.*;
import java.awt.geom.*;

public class StickFigure extends JComponent
{
public void paintComponent(Graphics g)
 {
    Graphics2D g2 = (Graphics2D) g;

    Ellipse2D.Double head = new Ellipse2D.Double(5, 10, 50, 50);
    g2.draw(head);

    Line2D.Double body=new Line2D.Double(30,60, 30,150);
    g2.draw(body);

    Line2D.Double arm1=new Line2D.Double(30,60,75,75);
    g2.draw(arm1);
    Line2D.Double arm2=new Line2D.Double(30,60,-75,-75);
    g2.draw(arm2);

    }
}

それが私に問題を引き起こしているコードです。次のビューアーを使用しています。

import javax.swing.JFrame;

public class Viewer
{
public static void main(String[] arg)
{
    JFrame frame = new JFrame();
    frame.setSize(1000,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    StickFigure fig1=new StickFigure();
    frame.add(fig1);
    frame.setVisible(true);

    }
}

私が間違っていることを教えてください。

4

2 に答える 2

0
Line2D.Double arm2=new Line2D.Double(30,60,-75,-75);

-75 と -75 で何を言っているのかを考える必要があります。これらは座標を作成し、(0, 0) は Swing の左上隅を表すことを覚えておいてください (そうしないように明示的に指示しない限り)。これらの座標は北西のオフスクリーンです。

次のようなものを試してください:

Line2D.Double arm2=new Line2D.Double(30,60, 45,75);
于 2013-10-25T01:07:47.100 に答える
0

両方に正の y last 座標を使用してみてください。

Line2D.Double arm1=new Line2D.Double(30,60,75,75);
g2.draw(arm1);
Line2D.Double arm2=new Line2D.Double(30,60,-75,75);
g2.draw(arm2);

-75 -75 は「線の反対バージョンを作成する」というのは正しいですが、両方の座標を変更すると、放射状の対称性が得られます。つまり、点 (首) の周りの対称性であるため、腕の 1 つが低く他はアップ。この場合、軸対称が必要です。そのためには、1 つの座標を反転するだけで済みます。人間の対称軸は背骨であり、垂直 ( y方向) であるため、座標xのみを反転する必要があります。

于 2013-10-25T01:11:07.737 に答える