Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
NetBeans 8.0.2
Статья по теме: 

По заданным параметрам построить фрактал Курликю.
Под примером прикреплен архив проекта со галереей скриншотов.

Для построения фрактала достаточно задать 4 параметра:

Первый параметр (обозначается буквой r) - длина кривой Корню, на основе которой строиться фрактал. В некотором смысле - это масштаб изображения.
Второй параметр (обозначается буквой t) - показатель степени, в которую мы возводим некоторое число v, которое мы будем перебирать в цикле (изменение этого параметра сильно влияет на угол поворота кривой)
Третий параметр (обозначается буквой s) - множитель, на который мы умножаем величину pow(v, t). Это позволяет нам регулировать угол поворота кривой Корню более точно, чем второй параметр.
Третий параметр (обозначается буквой step) - это шаг цикла (шаг изменения основания степени vt.

Для лучшего понимания взаимосвязи этих параметров давайте рассмотрим формулы, по которым вычисляется следующая точка для прорисовки фрактала:

double w = s * Math.pow(v, t); // вычисляем угол, на который нам нужно повернуть кривую Корню (элементарноя составляющая фрактала)
X2 = (int) (X1 + r * Math.cos(w)); // координаты следующей точки фрактала
Y2 = (int) (Y1 + r * Math.sin(w));

Код программы: 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Graphics gr = canvas1.getGraphics(); // Инициализируем графику
        Graphics2D g = (Graphics2D)gr; // Конвертируем графику в класс Graphics2D (необходимо для редактирования стиля кисти)
        g.setStroke(new BasicStroke(1.5f)); // Устанавливаем толщину кисти
        int DrawWidth = 10; // толщина рисуемой линии
        int xmax = 300; // сдвиг системы координат к центру формы
        int ymax = 300; 
        String str = jFormattedTextField1.getText(); // записываем значение первого поля ввода в строку
        double r = Double.parseDouble(str); // длина одного участка, масштаб рисунка (чем больше число, тем больше рисунок)
        str = jFormattedTextField3.getText(); // записываем значение третьего поля ввода в строку
        double s = Double.parseDouble(str); // второй параметр (дополнительный коэффициент) коэффицинет
        str = jFormattedTextField2.getText(); // записываем значение второго поля ввода в строку
        double t = Double.parseDouble(str); // показатель степени
        str = jFormattedTextField4.getText(); // записываем значение второго поля ввода в строку
        double step = Integer.parseInt(str); // показатель степени
        int X1 = 0; // Координаты начальной точки для рисования
        int Y1 = 100;
        g.clearRect(0, 0, 700, 700); // Очищаем область для рисования
        for (int v = -10000; v <= 10000; v += step) {
            double w = s * Math.pow(v, t); // вычисляем угол
            int X2 = (int) (X1 + r * Math.cos(w)); // координаты 
            int Y2 = (int) (Y1 + r * Math.sin(w)); // координаты 
            int red = Math.abs(v/4 + 1024) % 255; // по счетчику цикла определяем цвет рисования линии (содержание красного цвета)
            int green = Math.abs(255 - v/3) % 255; // по счетчику цикла определяем цвет рисования линии (содержание зеленого цвета)
            int blue = Math.abs(128 - v) % 255; // по счетчику цикла определяем цвет рисования линии (содержание синего цвета)
            g.setColor(new Color(red, green, blue)); // Определяем цвет в классе Graphics
            g.drawLine(X1 + xmax, Y1 + ymax, X2+xmax, Y2+ymax); // Рисуем отрезок
            X1 = X2; Y1 = Y2; // Текущую точку делаем предыдущей
        }        
    }   

Прикрепленный файлРазмер
Curlicue_fractal.rar908.15 кб