Долго мучалась над реализацией действий кнопок. В итоге кнопку старт запускает, но никак не могу разобраться, как именно строится дерево, что бы разделит действия построения.
Код:
import // тот же что и в сообщении выше
public class start {private static final int WIDTH = 1000;
private static final int HEIGHT = 500;
private static BufferedImage image;
private static Graphics2D graph;
private static final double DA = Math.PI / 6;
private static final int BASE_SIZE = 100;
private static final Color treeColor = new Color(0x712F26);
private static final Color leafColor = new Color(0x00FF00);
private static void drawPythagorasTree(double a, double size, double x, double y) {double dx = size * Math.sin(a);
double dy = size * Math.cos(a);
double x1 = x;
double y1 = y;
double x2 = x + dx;
double y2 = y - dy;
double x3 = x + dx - dy;
double y3 = y - dy - dx;
double x4 = x - dy;
double y4 = y - dx;
double x5 = x - dy + size * Math.cos(DA) * Math.sin(a - DA);
double y5 = y - dx - size * Math.cos(DA) * Math.cos(a - DA);
Path2D path = new Path2D.Double();
path.moveTo(x1, y1);
Wait.oneSec();
path.lineTo(x2, y2);
Wait.oneSec();
path.lineTo(x3, y3);
Wait.oneSec();
path.lineTo(x5, y5);
Wait.oneSec();
path.lineTo(x4, y4);
Wait.oneSec();
path.lineTo(x1, y1);
path.closePath();
graph.setColor(getBetweenColor(leafColor, treeColor,
Math.pow(size / BASE_SIZE, 0.2)));
graph.fill(path);
if (size > 1) {drawPythagorasTree(
a - DA,
size * Math.cos(DA),
x4,
y4);} }
private static void drawPythagorasTree2(double a, double size, double x, double y) {double dx = size * Math.sin(a);
double dy = size * Math.cos(a);
double x1 = x;
double y1 = y;
double x2 = x + dx;
double y2 = y - dy;
double x3 = x + dx - dy;
double y3 = y - dy - dx;
double x4 = x - dy;
double y4 = y - dx;
double x5 = x - dy + size * Math.cos(DA) * Math.sin(a - DA);
double y5 = y - dx - size * Math.cos(DA) * Math.cos(a - DA);
Path2D path = new Path2D.Double();
path.moveTo(x1, y1);
path.lineTo(x2, y2);
path.lineTo(x3, y3);
path.lineTo(x5, y5);
path.lineTo(x4, y4);
path.lineTo(x1, y1);
path.closePath();
graph.setColor(getBetweenColor(leafColor, treeColor,
Math.pow(size / BASE_SIZE, 0.2)));
graph.fill(path);
if (size > 1) {drawPythagorasTree(
a - DA + (Math.PI / 2),
size * Math.sin(DA),
x5,
y5);}}
private static Color getBetweenColor(Color startColor, Color endColor, double p) {
return new Color(
(int) (startColor.getRed() +
(endColor.getRed() - startColor.getRed()) * p),
(int) (startColor.getGreen() +
(endColor.getGreen() - startColor.getGreen()) * p),
(int) (startColor.getBlue() +
(endColor.getBlue() - startColor.getBlue()) * p));}
public static void main(String[] args) {
final JFrame f = new JFrame("Фрактельне дерево");
final JFrame fs = new JFrame("Побудова фрактального дерева");
fs.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField ts=new JTextField("Для побудови дерева натисність'Старт', а для завершення 'Стоп'.");
JPanel ps=new JPanel();
ps.setLayout(new GridLayout(2,1));
JButton bs2=new JButton("Старт");
ps.add(bs2);
fs.getContentPane().add(ps,BorderLayout.SOUTH);
fs.getContentPane().add(ts,BorderLayout.CENTER);
fs.setSize(400,180);
fs.setVisible(true);
bs2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}});
f.setVisible(true);
f.addNotify();
f.setSize(f.getInsets().left +
f.getInsets().right + WIDTH,
f.getInsets().top +
f.getInsets().bottom + HEIGHT);
image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
graph = image.createGraphics();
graph.setColor(Color.WHITE);
graph.fill(new Rectangle2D.Double(0, 0, WIDTH, HEIGHT));
graph.setColor(Color.BLACK);
drawPythagorasTree(
Math.PI / 2,
BASE_SIZE,
WIDTH / 2 - BASE_SIZE / 2,
HEIGHT - 50);
drawPythagorasTree2(
Math.PI / 2,
BASE_SIZE,
WIDTH / 2 - BASE_SIZE / 2,
HEIGHT - 50);
f.add(new JPanel() {
@Override
public void paintComponent(Graphics g) {
Graphics2D G = (Graphics2D) g;
if (image != null) {
G.drawImage(image, 0, 0, null);
} }});}});}}