1

我在一条垂直线上给出了 2 个点,(x0,y0) 和 (x0,y1),我想将这两个点与一个开始的拱形连接起来(看起来像一个环 - 或像半个圆周 - )在 (x0,y0) 并在 (x0,y1) 结束。

如果连接看起来像一个从开始指向结束的箭头,那将是完美的。

所有这些都使用图形或其他东西。

提前致谢 !!

4

3 回答 3

3

下面的代码产生了这个截图,它会在两点之间画一个半圆+最后添加一个箭头:

截图

代码:

JFrame frame = new JFrame("Test");
frame.add(new JComponent() {
    Point p1, p2; boolean first;
    {
        p1 = p2 = new Point();
        setPreferredSize(new Dimension(400, 400));
        addMouseListener(new MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent e) {
                if (first) p1 = e.getPoint(); else p2 = e.getPoint();
                first = !first;
                repaint();
            }
        });
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.fillRect(p1.x-1, p1.y-1, 3, 3); g.drawString("p1", p1.x, p1.y);   
        g.fillRect(p2.x-1, p2.y-1, 3, 3); g.drawString("p2", p2.x, p2.y);

        double angle = Math.atan2(p2.y - p1.y, p2.x - p1.x);
        int diameter = (int) Math.round(p1.distance(p2));

        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(p1.x, p1.y);
        g2d.rotate(angle);
        g2d.drawArc(0, -diameter/2, diameter, diameter, 0, 180);
        g2d.fill(new Polygon(new int[] {0,10,-10}, new int[] {0,-10,-10}, 3));
    }
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
于 2012-05-31T12:13:51.223 回答
2

我在一条垂直线上给出了 2 个点,(x0,y0) 和 (x0,y1),我想将这两个点与一个开始的拱形连接起来(看起来像一个环 - 或像半个圆周 - )在 (x0,y0) 并在 (x0,y1) 结束。

于 2012-05-31T11:33:45.917 回答
2

这是一个弧形绘制示例:

public class ArcExample extends JComponent
{
    protected void paintComponent ( Graphics g )
    {
        super.paintComponent ( g );

        Graphics2D g2d = ( Graphics2D ) g;
        g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON );

        g2d.setColor ( Color.RED );
        g2d.drawArc ( 0, 0, getWidth (), getHeight (), 90, -180 );
    }

    public Dimension getPreferredSize ()
    {
        return new Dimension ( 200, 200 );
    }

    public static void main ( String[] args )
    {
        JFrame frame = new JFrame ();
        frame.add ( new ArcExample () );
        frame.pack ();
        frame.setLocationRelativeTo ( null );
        frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
        frame.setVisible ( true );
    }
}
于 2012-05-31T11:51:49.550 回答