Предыдущая Следующая
if (!compute_ifs_probabilities (coeff__list)) { free_int__vector (p,l); f ree__int_yector (pi,l); return; >
for (i=l;i<=no_of_fns;i++)
pi[i] « (int)(((coeff_struct *)(coeff_list->at(i)))-> prob*MAX_INT) ;
for (i=l;i<=no__of__fns;i++) {
p[i] = int_sum + pi[i];
int__sum += pi[i] ;
} /* i */ p[no_of_fns] = MAXJENT;
free__int__vector (pi,l); x » 0; Y = 0;
/* bury first 10 iterations */ for (i=l;i<=10;i++) {
k = pick__random_jibr (p, no_of__f ns) ;
ifs = * (coeff_struet *) (coeff_list->at (k) ) ;
xnew = ifs.a*x + ifs.b*y + ifs.e;
ynew — ifs.c*x + ifs.d*y + ifs.f;
x = xnew;
y - ynew;
} /* i */
if (!graph^setup (gr)) /* free arrays before returning*/
goto exit_j?roc; draw_border (gr_setup,gr,1) ; set_graph__max__min (gr__setup, gr) ;
iter = 0; do {
k = pick__random_jibr (p, no_of__f ns) ;
ifs = * (coeff_struet *) (coeff_list->at(k));
xnew = ifs.a*x + ifs.b*y + ifs.e;
ynew - ifs.c*x + ifs.d*y + ifs.f;
62_Фракталы и вейвлеты для сжатия изображений в Дейс^
if (fabs(xnew) + fabs(ynew) > IFS_TOOJBlG) { message_puts (MB_EXCLAIM,"IFSPROC", "This system diverges!\r\n"
"Check to see that all transformations\r\n" "are contractions."); goto exit_proc; )
/* Plot the Х-У point in the window in color: */
xy__to_window_co lor ( gr, xnew, у new,
rgb_ifs^color (ifs));
x = xnew;
у = уnew;
iter++;
graph_i ter (gr_setup, gr, iter) ; } while ( ! terminating__proc ( ) ) ;
exit_proc:
release_dc (gr); free_int_vector (p,l); return;
} /* end proc */
2.5. Примеры
Мы завершим эту главу несколькими примерами систем итерируемых функций и соответствующих им изображений аттракторов. Все изображения в этом разделе были получены с использованием вероятностного алгоритма.
2.5.1. Треугольник Серпинского
Треугольник Серпинского (называемый также наконечником стрелы) - это один из самых ранних известных примеров фракталов. Существует несколько способов построения треугольника Серпинского, один из которых показан & Рис. 2.5.1. Мы начинаем со сплошного треугольника, как показано на рисунке слева. На первом шаге построения из его центра удаляется перевернутый треугольник, как показано # рисунке в центре. На втором шаге удаляются три переверну тых треугольника из трех оставшихся треугольников. Пр0, должая этот процесс, мы на шаге п удаляем З""1 перевернув треугольников из центров З""1 оставшихся треугольников. Т°! что остается (а что-то должно остаться!) - это и есть тр* угольник Серпинского. Предыдущая Следующая
|