Построить фрактал KAM Torus Данный фрактал рисуется с помощью уравнений, в которых переменная на каждом шаге увеличивается на единицу: x(0) = y(0) = num где num - некоторое начальное значение, а - угол в радианах Так же нам необходимо задать количество точек на орбите (т.е. число проходов цикла), величину шага для num и конечное значение для этой переменной. Т.к. величина угла - случайное число, то изображение будет менятся (в программе для этого необходимо нажать правую кнопку мышки). Функция рисования фрактала KAM Torus: void KamTorus (HWND hwnd, HDC hdc) { int a, nx, ny; time_t t; double an, can, san, can1, san1, e, r, ax, ay; double x, xa, x1, x2, x3, y, y1, y2, y3, rand1, rand2; HPEN DrawPen; // перо RECT rect; // клиентская область DrawPen = CreatePen(PS_SOLID, 1, RGB(0,0,0)); GetClientRect(hwnd, &rect); nx = rect.right / 2; // находим координаты середины окна ny = rect.bottom / 2; ax = 400.0; // начальное значение ay = ax; srand((unsigned) time(&t)); // генерация случайных чисел rand1 = rand() % 20000; rand2 = rand() % 20000; rand1 = 50000-5*rand1; rand2 = 50000-5*rand2; an = 10.0*(rand1-rand2); can = 0.99*cos(an); // вычисление синусов и косинусов san = 0.99*sin(an); can1 = 1.01*cos(an); san1 = 1.01*sin(an); x3 = 0.01; //начальные значения y3 = 0.01; e = 0.0; do { xa = x3*x3 - y3; x2 = x3*can1 + xa*san1; y2 = x3*san1 - xa*can1; x3 = x2; y3 = y2; x = x2; y = y2; a = 0; do { // рисуем орбиту xa = x*x - y; // вычисляем координаты текущей точки x1 = x*can + xa*san; y1 = x*san - xa*can; x = x1; y = y1; a++; MoveToEx(hdc, (int)(ax*x+nx), (int)(ay*y+ny), NULL); LineTo(hdc, (int)(ax*x+nx) - 1, (int)(ay*y+ny) + 1); } while ((fabs(x1)<=10000) && (fabs(y1)<=10000) && a <=100); e = e + 0.1; } while ((fabs(x2) <= 10000) && (fabs(y2) <= 10000)); }
Ключевые слова:
Фрактал KAM Torus
|
|||||||