我得到了头部,一只手臂和身体。我正在尝试使用相同的前两个坐标制作另一个手臂,这两个坐标从头部的底部开始,但是最后两个坐标的负最后(但是相同的数字)。我假设如果我做了一个负面版本,它只会制作一个相反的版本。相反,它只是坚持到底!我很困惑为什么会这样。
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);
}
}
请让我知道我做错了什么,我将不胜感激。
答案 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 。