read the IFS from a file into arrays affine[] and prob[] // читаем IFS из файла в массивы affine[] и prob[] set the window and viewport // задаем окно и порт просмотра chaosGame(a ffine.prob.N):
9.10. Тематические задания Схема подпрограммы chaosGameO приведена в листинге 9.6. Ваша программа должна прочитать
(из файла) данные для системы IFS, войти в графический режим и начать итерации в подпрограмме chaosGameO. Для задания окна, которое вместило бы в себя аттрактор, можно воспользоваться методом, предложенным в тематическом упражнении 9.1.
Поскольку может потребоваться несколько итераций, прежде чем точки начнут приближаться к истинному аттрактору, несколько первых итерационных точек лучше отбросить до начала рисования. Затем при каждой итерации функция 1nt chooseAffine (double рг[], 1nt N) будет выбирать одно из N аффинных отображений с вероятностью рг[1] для i-ro отображения. Такие действия проще всего описать на следующем примере.
Пусть N равно 4 и элементы массива рг[] составляют {0,41, 0,29, 0,04, 0,26}. Сумма этих элементов, разумеется, равна единице. С помощью следующего кода будет осуществляться выбор чисел 0,1,2,3 с соответствующими вероятностями:
val - randO % 10000:
// random value in the range 0..9999
// случайная величина в промежутке 0..9999
if(val < 4100) return 1:
else ifCval < 4100 + 2900) return 2:
else if(val < 4100 + 2900 + 400) return 3:
else return 4:
Оператор гаггаЧШОООО возвращает значение, которое с равной вероятностью может быть в любой точке интервала 0..9999. Этот интервал разбивается с помощью операторов 1f() так, чтобы в каждом подынтервале находилась соответствующая часть длины интервала гагкКШОООО. Такой подход легко обобщается на любой массив рг[].
Проверьте свою программу на каждой IFS, приведенной в разделе 9.5.4, а также возьмите другие IFS из программы FRACTINT в Интернете [Fractint, 66].
Необязательное дополнение. Цветная «Игра в Хаос» Дополните свое приложение так, чтобы оно рисовало цветные точки. Отображение окно - порт просмотра устанавливается как обычно, чтобы каждой точке (х, у) соответствовала позиция пиксела (col, row) (см. главу 3). Теперь при «Игре в Хаос» для каждой вычисленной новой точки счетчик соответствующего пиксела увеличивается на единицу. В конце игры каждый пиксел снабжен числом, показывающим, сколько раз этот пиксел был «посещен» точкой при ее движении по аттрактору. Для того чтобы изобразить эти значения в цвете, свяжите какой-нибудь цвет с каждым значением «счетчика посещений» и нарисуйте картинку.