Листинг 2.2. Функция инициализации myinit( )
void myinit(void) {
/* Атрибуты */
glClearColor(1.0, 1.0, 1.0, 0.0); /* белый фон */ glColor3f(1.0, 0.0, 0.0); /* вывод красным цветом */
/* Настройка параметров визуализации */
glMatrixMode(GL_PR0JECTI0N); gluLoadIdentity(); gluOrtho2D(0.0, 500.0, 0.0, 500.0); glMatrixMode(GL_MODELVIEW);
}
Листинг 2.3. Функция формирования изображения display ()
void display( void ) {
/* Определение типа данных для точек */ typedef GLfloat point2[2];
point2 vertices[3]={{0.0,0.0},{250.0,500.0},{500.0,0.0}}; /* Треугольник */
int i, j, k;
int rand(); /* Стандартный генератор случайных чисел */ point2 р ={75.0,50.0}; /* Произвольная точка внутри треугольника */
glClear(GL_C0L0R_BUFFER_BIT); /* Очистка окна */
2.7. Программа Gasket
/* Вычисление и вывод на экран 5000 новых точек */ for( k=0; k<5000; k++)
{
j=rand()%3; /* Выбрать вершину случайным образом */
/* Вычислить координаты точки, лежащей посередине между вершиной и предыдущей точкой */ р[0] = (р[0]+уегисе8[Я[01)/2.0; р[1] = (р[1]+уегисе8[Л[1])/2.0;
/* Вывести точку на экран */ glBegin(GL_POINTS);
glVertex2fv(p); glEnd();
дШивЬО;
_}_
В теле функции формирования изображения определены произвольный треугольник (массив из трех вершин) и произвольная точка внутри этого треугольника. Далее следует цикл, в котором формируется фиксированное количество (в данном случае 5000) точек. В конце процедуры вызывается ОрелвЬ-функция д1Е1изЬ(); тем самым система принуждается выводить сформированные точки на экран как можно скорее.
Полный листинг этой программы читатель найдет в приложении А.
2.8. Многоугольники и рекурсия Результат работы описанной выше программы (см. рис. 2.4) демонстрирует весьма интересную графическую структуру. Чем больше точек будет формировать эта программа, тем менее случайный характер будет носить изображение. Анализируя эту структуру, приходим к выводу, что независимо от количества сформированных точек, они никогда не появляются в середине некоторых треугольных областей. Если провести отрезки между средними точками прилежащих сторон исходного треугольника, то он будет разбит на четыре треугольника, причем в средний точки узора никогда не попадут (рис. 2.34).