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

Вход на сайт

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

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

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

Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

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

Рейтинг@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 кб