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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2012, 01:27   #1
Nostia
 
Регистрация: 23.12.2012
Сообщений: 4
Вопрос Не правильно рисуется фрактал

Необходимо нарисовать фрактал Водоворот через систему итерируемых функций. Выглядит он так


Коэфициенты для построения(в порядке a, b, d, e, f, p):
Код:
Swirl {
0.745455 -0.459091 0.406061 0.887121 1.460279 0.691072 0.912675
-0.424242 -0.065152 -0.175758 -0.218182 3.809567 6.741476 0.087325
}
Есть код, который какбы должен отрисовывать этот фрактал
Код:
import java.awt.Graphics;
import javax.swing.JPanel;
 
public class Surface extends JPanel{
	double a1 = 0.745455;
	double b1 = -0.459091;
	double d1 = 0.406061;
	double e1 = 0.887121;
	double c1 =1.460279;
	double f1 = 0.691072;
	double p1 = 0.912675;

	double a2 = -0.424242;
	double b2 = -0.065152;
	double d2 = -0.175758;
	double e2 = -0.218182;
	double c2 = 3.809567;
	double f2 = 6.741476;
	double p2 = 0.087325;
 
    double x1(double x, double y) {
        return a1 * x + b1 * y + c1;
    }
 
    double y1(double x, double y) {
        return d1 * x + e1 * y + f1;
    }
 
    double x2(double x, double y) {
        return a2 * x + b2 * y + c2;
    }
 
    double y2(double x, double y) {
        return d2 * x + e2 * y + f2;
    }
 
    public void paint(Graphics g) {
        drawFractal(g);
    }
 
    void drawFractal(Graphics g) {
        double x1 = 300;
        double y1 = 300;
        g.fillOval(300+(int)x1, 300+(int)y1, 3, 3);
        for (int i = 0; i < 10000; i++) {
            double p = Math.random();
            if (p < 0.91675) {
                x1 = x1(x1,y1);
                y1 = y1(x1,y1);
                g.fillOval(300+(int)x1, 300+(int)y1, 3, 3);
 
            } else{
                x1 = x2(x1,y1);
                y1 = y2(x1,y1);
                g.fillOval(300+(int)x1, 300+(int)y1, 3, 3);
                
            }
        }
    }
}
Но на деле отрисовывается вот что:
Screen Shot 2012-12-22 at 23.09.07.jpg
Подскажите, где ошибка? В алгоритме построения, или в отрисовке что не так?

Последний раз редактировалось Nostia; 23.12.2012 в 01:41.
Nostia вне форума Ответить с цитированием
Старый 23.12.2012, 01:30   #2
Nostia
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию

------------

Последний раз редактировалось Nostia; 23.12.2012 в 01:42.
Nostia вне форума Ответить с цитированием
Старый 23.12.2012, 02:29   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Я думаю, проблема вот тут:
Код:
x1 = x1(x1,y1);
y1 = y1(x1,y1);
и тут:
Код:
x1 = x2(x1,y1);
y1 = y2(x1,y1);
Ты используешь уже перезаписанный x1, а нужно, наверное, старый.
Carbon вне форума Ответить с цитированием
Старый 23.12.2012, 12:28   #4
Nostia
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию

Хм, верно. Поправила :
Код:
	void drawFractal(Graphics g) {
		double x1 = 300;
		double y1 = 300;
		double x2 = 0;
		double y2 = 0;
		g.fillOval(300 + (int) x1, 300 + (int) y1, 3, 3);
		for (int i = 0; i < 10000; i++) {
			double p = Math.random();
			if (p < 0.91675) {
				x2 = x1(x1, y1);
				y2 = y1(x1, y1);
				g.fillOval(300 + (int) x2, 300 + (int) y2, 3, 3);
				x1 = x2;
				y1 = y2;
			} else {
				x2 = x2(x1, y1);
				y2 = y2(x1, y1);
				g.fillOval(300 + (int) x2, 300 + (int) y2, 3, 3);
				x1 = x2;
				y1 = y2;
			}
		}
	}
все равно спираль такая выходит
Screen Shot 2012-12-23 at 10.31.56.jpg
Nostia вне форума Ответить с цитированием
Старый 23.12.2012, 14:02   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Ну тогда наверное алгоритм. Может что с ним не так?
Carbon вне форума Ответить с цитированием
Старый 23.12.2012, 14:46   #6
Nostia
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию

Есть две системы уравнений для подсчета координат точки. Вероятность выбора первой - 0.91675, второй - 0.087325. Берется рандомное число от 0 до 1 и в соответствии с его значением выбирается одна из двух систем для подсчета координат точки..
Вроде просто должно быть, но не получается то что надо
Nostia вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фрактал marat-link Помощь студентам 4 01.10.2012 14:14
Рисуется хвост за текстом (TextOut) artemavd Общие вопросы Delphi 19 17.05.2012 10:29
Не рисуется битмап Jugger Win Api 2 03.04.2012 15:15
Неправильно рисуется график Gamst Общие вопросы Delphi 0 02.02.2012 20:49
Не рисуется спрайт в Delphix DOLBY Мультимедиа в Delphi 0 01.04.2009 23:09