Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 22:55   #1
Manya8915
Новичок
Джуниор
 
Регистрация: 30.11.2011
Сообщений: 3
По умолчанию Построение фрактального дерева

Нужно постоит фрактальное дерево, при нажатии на клавишу старт начинает строится ствол, ветки, листья и т. д. пока не будет нажата клавиша "Стоп."
Нашла хорошую программу
Код:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main {
    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);
        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,
                    size * Math.cos(DA),
                    x4,
                    y4);
            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) {
        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);

        JFrame frame = new JFrame();
        frame.addNotify();
        frame.setSize(frame.getInsets().left +
                frame.getInsets().right + WIDTH,
                frame.getInsets().top +
                frame.getInsets().bottom + HEIGHT);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(new JPanel() {
            @Override
            public void paintComponent(Graphics g) {
                Graphics2D G = (Graphics2D) g;
                if (image != null) {
                    G.drawImage(image, 0, 0, null);
                }
            }
        });
        frame.setVisible(true);
    }
}
Продолжение в следующем сообщении.
Manya8915 вне форума Ответить с цитированием
Старый 30.11.2011, 23:00   #2
Manya8915
Новичок
Джуниор
 
Регистрация: 30.11.2011
Сообщений: 3
По умолчанию

Долго мучалась над реализацией действий кнопок. В итоге кнопку старт запускает, но никак не могу разобраться, как именно строится дерево, что бы разделит действия построения.
Код:
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);
                } }});}});}}
Manya8915 вне форума Ответить с цитированием
Старый 30.11.2011, 23:01   #3
Manya8915
Новичок
Джуниор
 
Регистрация: 30.11.2011
Сообщений: 3
По умолчанию

Нашла клас
Код:
public class Wait {
	  public static void oneSec() {
	        try {
	          Thread.currentThread().sleep(1000);
	          }
	        catch (InterruptedException e) {
	          e.printStackTrace();
	          }
	        }  
}
Но при добавлении Wait.oneSec(); программа или подвисает или окно с деревом открывается с садержкой.
Я не очень розбираюсь в Jave, но насколько я поняла эту программу нельзя будет приспособить к моему заданию. Буду благодарна за любую помощь.
Manya8915 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение остовного дерева методом поиска в глубину Klik_1602 Помощь студентам 0 05.06.2011 23:30
построение бинарного дерева по инфиксной записи Екатерина Семенова Помощь студентам 1 23.05.2011 20:45
Построение дерева графа. Язык C Best1501 Общие вопросы C/C++ 2 11.12.2010 21:52
Построение дерева TzX Компоненты Delphi 2 20.07.2010 15:20