rnd2tin -f -m [-p] [-t] [-l] [-n]
Опции:
-f — входной файл данных ЦМР (цифровая модель рельефа). Программа принимает данные ЦМР, которые хранятся в виде простого текстового файла ASCII. Каждая строка файла содержит значения x, y и elevation точки ЦМР, разделённые пробелами.
-m — выходной файл Gmsh (.msh) сгенерированного TIN (Triangulated Irregular Network).
-p (опционально) — входной текстовый файл полигона для управления очертанием формы сгенерированного TIN. Полигон представлен местоположением его углов. Каждая строка файла должна содержать значения x и y вершины угла. Вершины могут быть упорядочены по часовой стрелке или против часовой стрелки.
-t (опционально) — порог максимальной ошибки сгенерированного TIN относительно входной сетки ЦМР.
-l (опционально) — выходной текстовый файл журнала максимальной ошибки сгенерированного TIN.
-n (опционально) — выходной текстовый файл смежности сгенерированного TIN.
Приведён простой пример использования библиотеки для генерации TIN, который вы видите вверху этой страницы. Дополнительные примеры можно найти в папке src/demo.
#include "../lib/tin.h"
#include "iostream"
#include "fstream"
#include "iomanip"
int main(int argc, char const *argv[])
{
// чтение сетки ЦМР
std::vector<double> topo(10201);
std::ifstream infile("data/topo");
for (int i = 0; i < 10201; ++i)
{
infile >> topo[i];
}
infile.close();
// подготовка переменных и векторов
std::vector<double> err_records;
std::vector<vertex2dc*> tin_vert;
std::vector<triangle*> tin_ele;
// вызов функции grd2tin для генерации TIN
// результирующие вершины и грани сохраняются в
// векторах tin_vert и tin_ele соответственно.
grd2tin(topo, 0, 1000, 0, 1000, 10, 10, tin_vert, tin_ele, 1.0, nullptr, &err_records);
// запись файла журнала процесса построения,
// который можно изучить позже.
std::ofstream logfile("data/topo_TIN.log");
logfile << "# Вставка максимальной ошибки\n";
for (int i = 0; i < err_records.size(); ++i)
{
logfile << i+1 << " " << err_records[i] << std::endl;
}
logfile.close();
// записать файл .msh Gmsh для визуализации
std::ofstream outfile("data/topo_TIN.msh");
outfile << "$MeshFormat" << std::endl << "2.2 0 8" << std::endl << "$EndMeshFormat "<<std::endl;
outfile << "$Nodes" << std::endl << tin_vert.size() << std::endl;
for (int i = 0; i < tin_vert.size(); i++)
{
outfile << tin_vert[i]->id + 1 << " " << std::setprecision(16)
<< tin_vert[i]->x << " " << tin_vert[i]->y << " " << tin_vert[i]->elev << std::endl;
}
outfile<<"$EndNodes"<<std::endl;
outfile << "$Elements" << std::endl << tin_ele.size() <<std::endl;
for (int i = 0; i < tin_ele.size(); i++)
{
outfile << i + 1 << " 2 0";
for (int j = 0; j < 3; j++)
{
outfile << " " << tin_ele[i]->vert[j]->id + 1;
}
outfile << std::endl;
}
outfile << "$EndElements"<< std::endl;
outfile<<"$$NodeData"<<std::endl;
outfile<<1<<std::endl
<<"\"Topography (m)\"" <<std::endl
<< 1 <<std::endl<< 0.0 <<std::endl
<< 3 <<std::endl<< 0<<std::endl
<< 1 <<std::endl<< tin_vert.size() <<std::endl;
for (int i = 0; i < tin_vert.size(); i++)
{
outfile << tin_vert[i]->id + 1 << " " << std::setprecision(16) << tin_vert[i]->elev << std::endl;
}
outfile << "$EndNodeData" << std::endl;
outfile.close();
// написать файл соседства
outfile.open("data/topo_TIN.neigh");
outfile << tin_ele.size() << std::endl;
for (int i = 0; i < tin_ele.size(); i++)
{
outfile << i + 1;
for (int j = 0; j < 3; j++)
{
if (tin_ele[i]->neigh[j] != nullptr)
{
outfile << " " << tin_ele[i]->neigh[j]->id + 1;
}
else outfile << " -1";
}
outfile << std::endl;
}
outfile.close();
// освободить память, выделенную функцией grd2tin
В запросе используется язык C++. Функция:
for (int i = 0; i < tin_vert.size(); ++i)
{
delete tin_vert[i];
}
for (int i = 0; i < tin_ele.size(); ++i)
{
delete tin_ele[i];
}
return 0;
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )