1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yizhangss-libtin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Библиотека C++ для триангуляционной нерегулярной сети (TIN). Развернуть Свернуть
AGPL-3.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yizhangss-libtin.git
git@api.gitlife.ru:oschina-mirror/yizhangss-libtin.git
oschina-mirror
yizhangss-libtin
yizhangss-libtin
master