Разработка информационной системы для деканата высшего учебного заведения
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
HIZU_H
#define CHIZU_H
#include
#include
#include
//Пользовательские модули
#include "merkator.h"
#include "doubletable.h"
#include "spline.h"
#include "lotexture.h"
#include "material.h"
#include "geometry.h"
#include "mathadv.h"
using namespace std;
//Константы максимума и минимума
#define MAX 9999999999
#define MIN -9999999999
//Цветовые константы
#define COLOR_RED 0
#define COLOR_GREEN 1
#define COLOR_BLUE 2
//Стандартизация исходныхReplaceComma(AnsiString);
//Получение строки из числаPointDouble(double);
//Получние строки с градусами и минутами из градусов с нецелой частьюDegToDegMin(double);
//Получение строки с градусами,
//минутами и секундами из градусов с нецелой частьюDegToCoord(double);
//Получение строки из градусов с нецелой частью, добавляет букву E или NDegToDegMinI(double, bool);
//Получние строки с градусами и минутами из градусов с нецелой частью,
//добавляет букву E или NDegToDegMinSecI(double, bool);
//Получение градусов с нецелой частью из градусов, минут и секунд
double DegMinSecToDouble(double, double, double);
//Установка заголовка окна, виртуальная функция, реализуемая
//в модуле, где расположено окноSetTitle(AnsiString msg);
//Функуция для тестированияDebag(AnsiString msg);
//Структура "трёхмерная точка"
struct point3D
{x,y,z; //координаты
bool ataru(point3D &); //проверка на совпадение с другой
};
//Структура "узел батиметрии", основанная на трёхмерной точке
struct vertex:point3D
{nx,ny,nz; //нормали b; //буфер для размытияe; //существует ли
};
//Попадает ли трёхмерная точка в треугольник
bool InTriangle(point3D &, point3D &, point3D &, point3D &);
//Существует ли такой треугольникCorrectTria(point3D &, point3D &, point3D &, double);
//Универсальная функция расчёта цвета по глубине
double countColor(double, double, double, unsigned __int8, bool, bool);
//Точка батиметрического трекаBathPoint
{D r,m; //Точка в географических и нормализованных к 1 координатахint t; //Сколько миллисекунд прошло с начала трекаtide; //Высота прилива в данной точке(); //Конструктор
};
//Изолинияisoline
{D a,b; //начало и конецzero; //не показывать(); //конструктор
void put(double &, double &, double &, //задать&, double &, double &, bool &);view(int &); //показать
};
//цифра-подписьfigure:public point3D
{exists; //показыватьlength; //размер
isoline *line; //к какой изолинии привязанаstr[8]; //что отображатьstrl; //длина строки
double angle; //угол разворотаactivate(double, double); //"прилепить" к изолинии
void view(int); //показать
};
//Структура треугольника для триангуляцииOneTri
{
//порядковые номера точек в качестве вершин
unsigned int a,b,c;
};
//основной класс батиметрииbath:public texture
{:
//поляf; //уровень для расчёта изолинийzero; //являетмя ли уровень текущей изолинии нулевымmaterial_color[4]; //массив цвета материала tri; //набор треугольников для триангуляции
//буферная изолиния для работы функции расчёта изолиний
isoline line;
//методыtriangulation();:
//поля *isolist; //список уровней изолинийd; //шаг сетки
double sclxy; //коэффициент нормализации долготы и широтыsclz; //коэффициент нормализации высотыcfx; //коэффициент нормализации долготыcfy; //коэффициент нормализации широты
//суммарное математическое отклонение данных от исходных в
//результате сглаживания и расчёта равномерной сеткиdev;tmpz; //нормализованная высота для расчёта цветаisoHaba; //частота изолинийisolineSize; //толщина изолинииD min; //минимум, нормализованный к 1D max; //максимум, нормализованный к 1D rmn; //минимум в географических координатахD rmx; //максимум в географических координатах
//число строк в текстуре для доступа к ячейке одномерной
//текстуры по двум координатамk;blurCount; //количество проходов размытияtexNum; //ID текстуры в среде OpenGLfighaba; //Расстояние между подписямиdiffBlur; //количество проходов размытия для сравнения батиметрийstep; //пропуск кратных узлов сетки для ускорения отображенияFilename; //имя файлаtex; //отображение текстуры средставми OpenGLvarIso; //переменный список изолинийlighting; //освещение включеноrt; //режим отображения без пропусковviewPoints; //отображать трекиnet; //отображать сеткуcounted; //сетка уже расчитанаisolines; //отображать изолинииviewRelief; //отображать рельефvisible; //отображать сеткуhideFar; //скрыть удалённые участки
//скрыть участки, выходящие за границу минимума и максимума
bool hideUpLimit;needRecount; //требуется перерасчёт
bool difference; //является разницей между двумя батиметриямиblackAndWhite; //отображать в чёрнобелых тонахslg; //является прочитанным slg-файломhasTide; //прилив вычтен
//методы
//Конструктор();
//Чтение точек из ASCII-файла
bool LoadPoints(AnsiString, bool, bool);
//Чтение трека из slg-файлаLoadSlg(DoubleTable &, AnsiString);
//Очистить батиметриюMakeEmpty(int);
//Расчёт прилива
void CountTide(cubic_spline &);
//Вычисление минимума и максимумаReCountMinMax();
//Вычисление только минимумаReCountMin();
//Расчёт батиметрической сеткиCountNet(int, point3D, point3D, double, double, double, double,, int, double, double, int, int, int, dinmas *, bool);
//размытиеblur(int);
//расчёт отклоненияdeviation();
//Расчёт цвета для выбранного узла сетки
inline __fastcall void CountColor(int &, int &);
//Перерасчёт цветаReCountColor();
//Вычисление нормалей
inline __fastcall void CountNorm(int &, int &);
//Конструктор (в виде вызываемой функции)DefConstr();
//Вывод одного узла сетки на экран
void OneVertex(int &, int &);
//Вывод всей батиметрииview();
//Вывот трековViewPoints();
//Линейная интерполяция
double cf(double &, double &, double &, bool);
//Создание одной изолинииmakeLine(int &, int &);
//Отображение цифр-подписейViewFigures(int);
//Расчёт