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

Вход на сайт

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

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

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

Чет не работает, помогите, надо очень сильно
добрый день! при попытке компиляции выдает Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPointSize" 1>Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPopMatrix" 1>Source.obj : error LNK2001: неразрешенный...
Можно точно вот эту программу просто наоборот типа:4,3,2,1,4 вот так надо двигаться
Здравствуйте. Спасибо за полезную инфу про уравнения а не матрицы. Во всём интернете только матрицы. У Вас опечатка в уравнении вращения по Z в координате Y= надо минус добавить И ещё. Все предыдущие уравнения можно подставить в последнее уравнение...

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

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


Построение множества Мандельброта


Алгоритм построения множества Мандельброта основан на итеративном выражении:
Z[k + 1] = Z[k]*Z[k]+ C,

где Z[k] и C – комплексные переменные, k – номер итерации, k = 1, 2, .;
Z[0]= 0.
Любое комплексное число Z можно представить в виде:
Z = x+ y*i, где x и y это действительные числа, i – мнимая единица. Цвет точки на экране определяется например количеством итераций, за которые точка убегает на бесконечность. Для построения же облака Мандельброта мы не будем определять цвет текущей точки , а будем отмечать её траекторию, то есть последовательность точек z, f(z), f(f(z))..., где f(z)=z2+C

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

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Main {
 
private static final double SX = 0.008;
 
 // Чем больше значение тем больше точки похожи на плоскость 
 
private static final double SY = 0.008;
 
private static final int WIDTH = 640;
 
// размер ширины
 
private static final int HEIGHT = 480;
 
<em>// размер высоты</em>
 
private static final double DX = -350;
 
// для центровки внутри фрейма
 
private static final double DY = -235;
 
// для центровки внутри фрейма
 
private static final int COUNT_ITER = 500;
 
// число итераций, чем больше число - тем больше точек
 
private static final int BAIL_OUT = 16;
 
private static final int STEP_X = 10;
 
private static final int STEP_Y = 10;
 
private static void drawFractals(Graphics g) {
 
g.setColor(Color.BLACK); // устанавливаем цвет черный 
g.fillRect(0, 0, WIDTH, HEIGHT); // рисуем этим цветом весь фрейм
 
for (int i = 0; i < WIDTH; i += STEP_X) {
for (int j = 0; j < HEIGHT; j += STEP_Y) {
double c = SX * (i + DX); // центрируем по X 
double d = SY * (j + DY); // центрируем по Y
double x = c; // ось х
double y = d; // ось y
double t;
int k = 0;
g.setColor(new Color((float)Math.random(), <em>// при каждой итерации цикла получаем новый цвет</em>
(float)Math.random(), (float)Math.random()));
while (x * x + y * y < BAIL_OUT && k < COUNT_ITER) { // алгоритм
t = x * x - y * y + c;
y = 2 * x * y + d;
x = t;
g.drawOval((int) (x / SX - DX), (int) (y / SY - DY), 1, 1);
++k;
}
}
}

Прикрепленный файлРазмер
MClouds.zip158.65 кб