Вывод графика функции. Построение алгоритма и разработка программу для решения задачи

Страницы работы

Фрагмент текста работы

задачи аналогичны задаче, решение которой приведено в примере выполнения задания 2 данного расчетно-графического задания. Описания построения изображения нет только для задачи 17. Приведем его.

Задача 17. Опишем алгоритм изображения дерева с помощью рекурсии. Дерево будет состоять из ствола, веток и листьев (рис. 25). Из конца каждой ветки будут выходить две ветки и их длины будут уменьшаться и вычисляться случайным образом (рис. 25). Как только длина ветки окажется меньше либо равна 5 пикселам, то выводим лист в виде окружности радиусом в 5 пикселов.

Вычислить длину ветки случайным образом можно различными способами. Например, приведенная ниже функция rn вычисляет случайную величину, которая принадлежит отрезку [0.5x, x], где x задано.

// Вычисление случайной величины из отрезка [0.5x, x]

float rn (float x)

{

return x*(random(500)+500)/1000;

}

Обозначим l длину ветки, (x,y) – координаты ее начала, φ – угол между осью x и веткой (рис. 26). Тогда координаты ее конца вычисляются по формулам: x1= x+l·cosφ, y1= y+l·sinφ. Для того, чтобы длины двух новых веток, выходящих из точки (x1,y1), уменьшались и вычислялись случайным образом, рекомендуется задавать их равными 0.9*rn(l) и 0.8*rn(l). Угол φ тоже меняется. Для одной ветки он равен, например, φ+π/5, для другой - φ-π/5. В качестве параметров рекурсивной функции рекомендуется выбрать x, y, l и φ.

Так как ось y в экранной системе координат направлена вниз, то при первом выводе рекурсивной функции угол φ нужно задать равным -π/2.

Задача 19. В этой задаче требуется вывести проекцию видимых граней куба и, используя различные шаблоны заполнения для граней, создать впечатление объемности изображения. Цвет изображения одинаковый для всех граней, различны шаблоны заполнения. Шаблоны заполнения можно задать с помощью функции setfillstyle. О шаблонах заполнения см. также пп. 1.4 данного пособия.

ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ 1

Задание. Построить график функции y = 1/x на отрезке [-5, 5].

Решение. Для выполнения этого задания возьмем за основу пример, приведенный в пп. 1.5. Число точек графика зададим равным 101. Число отрезков n на единицу меньше, чем число точек, следовательно, n=100. График строится на отрезке [-5, 5], следовательно, xmin=-5, xmax=5, ymin=-5, ymax=5. Обозначим через hx шаг по переменной x, который вычисляется по формуле hx=(xmax-xmin)/n.

Функция y = 1/x на отрезке [-5, 5] имеет одну точку разрыва x = 0 (знаменатель дроби обращается в ноль). В данном примере при выводе на экран графика функции, которая имеет точки разрыва, рекомендуется поступать следующим образом. Сначала нужно определить все  точки разрыва, принадлежащие отрезку [xmin, xmax], для которого строится график функции. В нашем случае одна точка разрыва. Пусть функция y имеет k точек разрыва C1,C2,…Ck на этом отрезке. В данном примере k = 1, C = 0. Разобьем отрезок [xmin, xmax] на k + 1 отрезков [xmin, C1-hx], [C1+hx, C2-hx],…,[Сk+h, xmax], каждый из которых не содержит точек разрыва. В нашем примере получаем два отрезка: [-5,-hx] и [hx, 5]. Для каждого отрезка, не содержащего точек разрыва, построение графика осуществляется аналогично примеру из пп. 1.5.

Таким образом, в данном примере в тексте программы один цикл

for(x=xmin;x<xmax;x+=hx)

заменяется на два цикла

for(x=xmin;x<-hx;x+=hx)

for(x=hx;x<xmax;x+=hx)

В общем случае один цикл заменяется на k + 1 цикл, где k – число точек разрыва.

Для функции, заданной параметрически, как x=f(t) и y=g(t), описываются и определяются переменные t,tmin,tmax и функции f(t), g(t). В тексте программы цикл

for(x=xmin;x<xmax;x+=hx)

line(e_x(x,fi(x)), e_y(x,fi(x)),e_x(x+hx,fi(x+hx)), e_y(h+hx,fi(x+hx));

заменяется на цикл

for(t=tmin;t<tmax;t+=ht)

line(e_x(f(t),g(t)), e_y(f(t),g(t)),e_x(f(t+ht),g(t+ht)), e_y(f(t+ht),g(t+ht));.

Для функции, заданной в полярных координатах, как r = f(j), описываются и определяются переменные fi, fimin, fimax и функции r(fi), fx(r,fi), fy(r,fi). Угол fi измеряется в радианах и измеряется от 0 до 2p. Декартовы координаты вычисляются по формулам

Похожие материалы

Информация о работе