-GRIDBALL(); }:

class GLOBE //Описание построенного по сетке визуализируемого объекта. {

void RenderGгid(GRIDBALL *Gr.bool Fill): //Отображение сетки Gr.

GRIDBALL *pBall: //Сетка 1 для шара.

GRIDBALL *pGrid; //Сетка 2 для географических координат.

public:

bool fShowGrid; //Признак отображения второй, вспомогательной сетки.

float LineWidth; //Толщина линий координатной сетки.

GLOBECGRIDBALL *В - NULL.GRIDBALL *G - NULL.bool f - true.float L - 2.0):

pBal 1(B).pGrid(G),fShowGrid(f).Li neWidth(L){} void Render(void): //Функция отображения глобуса. }: Обратите внимание на присвоение в конструкторе параметру F значения по умолчанию F = Col orFon ( 180. 150. 150 ). А вот для инициализации Fon ( F ) поля Fon класса GLOBE параметром F объявлять конструктор копирования нет необходимости, так как в любой структуре он неявно создается по умолчанию.

Реализация рассмотренных классов находится в модуле GLDat.cpp, исходный код которого приведен в листинге 22.17.

Листинг 22.17

finclude <windows.h> Начало текста модуля GLDat.cpp

#include <math.h>
#include"GLDat.h"

//Функция формирования очередного узла сетки

void GRIDBALL::SetKnot(int i.int j.double di.double dj)
{
Grid[i][j].y - Rz*sin(dj): Grid[i][j].x - -Rz*cos(dj)*cos(di Grid[1][j].z - -Rz*cos(dj)*sin(di):

продолжение &

Инициализация библиотек и вывод примитивов

Листинг 22.17 (продолжение)

//Минус ближе - он получится для восточного полушария.

//Вычисление нормалей единичной длины. Учитываем, что центр шара

//совмещен с центром объектной системы координат.

Gr1d[i][j].Nx - Gr1d[i][j].x/Rz:
Grid[i][j].Ny - Grid[i][j].y/Rz;
Grid[i][j].Nz - Grid[i][j].z/Rz;
}

Но следует отметить, что можно было использовать библиотечную функцию нормализации вектора.

Выделение формирования узла сетки в отдельный виртуальный метод обеспечивает возможность дальнейшего развития проекта. В будущем может быть объявлен класс-наследник GRIDBALL, в котором метод SetKnoK) переопределен и формирует узлы другой поверхности, узлы которой также зависят от двух вещественных параметров - di, dj (эллипсоида вращения, сетки высот поверхности Земли и пр.). При этом не потребуется почти никаких изменений в методах и классах, выполняющих создание и отображение новой поверхности.


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