0

我得到了头,一只手臂和身体。我正在尝试使用相同的前两个坐标制作另一只手臂,该坐标从头部底部开始,但最后两个坐标为负数(但数字相同)。我假设如果我制作了一个否定版本,它只会制作该行的相反版本。相反,它只是直立!我很困惑为什么会这样。

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“只会制作一条相反的线”,但是当你改变两个坐标时,你会得到径向对称,即围绕一个点(颈部)对称,因此你的一只手臂很低,并且另一个起来了。在这种情况下,您需要对称,为此您只需翻转一个坐标;由于人们的对称轴是脊柱,并且它是垂直的(y方向),因此您只需要翻转坐标x

于 2013-10-25T01:11:07.737 回答