我想在java中做一个简笔画

时间:2013-10-25 01:01:09

标签: java

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

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);

    }
}

请让我知道我做错了什么,我将不胜感激。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

尝试对两者使用正y个最后一个坐标:

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“只会制作相反版本的线条”,但当你改变两个坐标时,你会得到径向 simmetry,这是一个点周围的模拟(颈部)因此,你的一只手臂低,另一根手臂向上。在这种情况下,您需要对称,为此您只需要翻转一个坐标;因为人的对称轴是脊柱,而且它是垂直的( y - 方向),所以你只需要翻转坐标 x