Напишите программу, которая вычерчивает функциональную зависимость членов последовательности ук = Рк](уа) от к. Пользователь задает начальную величину г/0 в интервале от 1 до 4 000 000 000 (числа такого размера поддерживаются типом unsigned longs - длинные целые без знака). Каждое значение^ изображается на графике точкой с координатами (к, ук). Построение каждого графика продолжается до тех пор, пока ук не достигнет единицы (если это вообще произойдет).

Поскольку последовательность «градин» может быть очень длинной, а величины ук могут быть очень большими, необходимо масштабировать эти величины перед их отображением на экране. Напомним Глава 2. Начальная стадия: рисование фигур

(раздел «Рисование основных графических примитивов»), что подходящие значения А, В, С и D задаются так, что когда точка (k, ук) отображается с экранными координатами

sx - (А*к + В)

И

sy - (С*ук + D).

то вся последовательность помещается на экране.

Отметим, что вы не знаете заранее, какой длины будет данная последовательность или какого значения достигнут величины ук, - до тех пор, пока не будет сгенерирована вся последовательность. Самое простое решение заключается в том, чтобы сначала запустить последовательность без рисования, найти максимальную величину, которой достигает ук (назовем ее yBiggest), а также общее число итераций, kBiggest, необходимое для того, чтобы последовательность достигла единицы. Эти величины используются далее для определения коэффициентов А, В, С, D. После этого последовательность запускается повторно с рисованием. Для получения окончательного вида графика проделаем следующее: О Начертим горизонтальные и вертикальные оси.

О Вместо ук нанесем на график логарифм ук.

Вопрос для любознательных. Каковы наибольшие yBiggest и kBiggest для произвольной последовательности «градин» со стартовой величиной от 1 до 1 ООО ООО?

Итерация с помощью функций, генерирующих точки Процесс итерации чисел с помощью какой-нибудь функции /(.) достаточно интересен, однако итерация точек с помощью функции еще интереснее, так как мы можем использовать drawDotQ для создания узоров из появляющихся точек. Итак, рассмотрим функцию f(p), которая принимает на входе точку р(х, у) и выдает на выходе другую точку. Каждая вновь получившая точка подается опять в ту же самую функцию для создания следующей точки, как показано на рис. 2.28. Здесь точкарк1 используется для k-й итерации рк - flkKp0), затем она направляется обратно для создания ркп и т. д. По аналогии назовем последовательность точек р0, р{, р2 орбитой точки р0.


⇐ Предыдущая| |Следующая ⇒