-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 (эллипсоида вращения, сетки высот поверхности Земли и пр.). При этом не потребуется почти никаких изменений в методах и классах, выполняющих создание и отображение новой поверхности.