How can I draw in java figure like this?
Here is my code which has to draw at least half of this figure
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class Main {
    public static void main(String[] a) {
        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setBounds(30, 30, 300, 300);
        window.getContentPane().add(new MyCanvas());
        window.setVisible(true);
      }
}
class MyCanvas extends JComponent {
    private static final long serialVersionUID = 1L;
    public void paint(Graphics g) {
        int i =0;
        for ( i = 0; i < 100; i++) {
            int x=1+i*3;
            g.drawLine(x, 200, 2+(x+(i/2)), 400-((i*i)/20));
        }
    }
}
And I get this one.
drawPoints(ctx, points); You can change the var points array to any points you like. var points = [[50,50],[50,100],[100,100],[100,50]]; This should connect all the points with a black line.
The Java library includes a simple package for drawing 2D graphics, called java.
Draw. This class provides a basic capability for creating drawings with your programs. It uses a simple graphics model that allows you to create drawings consisting of points, lines, and curves in a window on your computer and to save the drawings to a file.
A little animation  to show you the logic you need to be looking for in terms of line rotation. Think of the line like a hand on a clock. How would to animate a hand on a clock. It's pretty much the exact same concept. The only difference is that the x1 (the x point for the center point of the clock hand), instead of remaining still, it moves along the x axis (which is the y1 constant) while the hand is turning. So for every tick of the clock (hand rotation), the x location is also moved horizontally. That's the way I looked at it.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Main {
    public static void main(String[] a) {
        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setResizable(false);
        window.getContentPane().add(new MyCanvas());
        window.pack();
        window.setVisible(true);
    }
}
class MyCanvas extends JPanel {
    int x1 = 0;
    int rotate = 50;
    List<Line> lines;
    Timer timer = null;
    public MyCanvas() {
        lines = new ArrayList<>();
        timer = new Timer(75, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (rotate < -50) {
                    ((Timer) e.getSource()).stop();
                } else {
                    lines.add(new Line(x1, rotate));
                    repaint();
                    x1 += 5;
                    rotate--;
                }
            }
        });
        JButton start = new JButton("Start the Magic");
        start.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                timer.start();
            }
        });
        add(start);
    }
    public Dimension getPreferredSize() {
        return new Dimension(502, 400);
    }
    private static final long serialVersionUID = 1L;
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());
        for (Line line : lines) {
            line.drawLine(g);
        }
    }
    class Line {
        int x1;
        int rotate;
        int y1 = 200;
        public Line(int x1, int rotate) {
            this.x1 = x1;
            this.rotate = rotate;
        }
        void drawLine(Graphics g) {
            int Radius = (int) (Math.min(getWidth(), getHeight()) * 0.4);
            int sLength = (int) (Radius * 0.9);
            int xSecond = (int) (x1 + sLength * Math.sin(rotate * (2 * Math.PI / 100)));
            int ySecond = (int) (y1 - sLength * Math.cos(rotate * (2 * Math.PI / 100)));
            g.setColor(Color.GREEN);
            g.drawLine(x1, y1, xSecond, ySecond);
        }
    }
}
                        Me so much :D
 float centerY = 250;
 float x1 = 0;
 float x2 = 0;
 float y2 = 400;
 float way2 = 0;
 for (int i = 0; i < 125; i++)
 {
   x2 += cos(way2*PI/-180)*10;
   y2 += sin(way2*PI/-180)*10;
   way2 += centerY/y2*0.235*10;
   x1 += y2/600*10;
   g.drawLine(x1,centerY,x2,y2);
 }

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With