Skip to content

DeStep3000/IOT

Repository files navigation

Дешифратор 📋

C++

Описание

Этот код предназначен для дешифровки документа, содержащего наборы чисел, предположительно представляющих собой координаты вершин треугольников. Сам файл представлен в виде документа с расширением ".txt", содержимое же выглядит примерно так:
03 9 56 75259 259 25 27 03 10 567 4 23 75259 259 25 27 03 11 567 4 23 75259 259
 03 12 567 4 23 75259 259 67 68 39 988 90 67 03 03 13 567 4 23 5 6    03 14 8 567 678 567 103 480 444

Предполагается, что 0x обозначает количество вершин, а следующим за ним числа - вершины многоугольника. Выдвигается гипотеза, что итоговое пересечение многоугольников является ключом для дешифровки.


Цель: Найти область пересечения многоугольников.

result

Содержание

Технологии

проект реализован на C++

  • CMake
  • GoogleTest
  • SFML
  • wxWidgets

Использование

Если вы хотите работать с чистым(без графики) кодом напрямую, то для этого подключите "polygon.h" в main.cpp:

#include "polygon.h"
int main() {
    return 0;
}

Далее, организуем чтение из файла, чтобы считать текст и преобразовать в дальнейшем в поле класса:

const std::string path = "yourpathtofile\\test.txt";//Абсолютный путь к файлу
std::string input = read_file(path);//чтение из файла
input= edit_file(input);//преобразование данных

После, необходимо создать экземпляр класса PolygonField, который реализует работу с "полем" многоугольников:

PolygonField pn_field;//создаем экземпляр класса
pn_field.input_polygons(input);//Передаем данные

Далее вызываем intersect_polygon_field_final() и сохраняем результат в Polygon:

pn_field.print_field();//выводим все многоугольники в консоль
Polygon res = pn_field.intersect_polygon_field_final();//пересекаем многоугольники
res.print_vertices();//выводим результат в консоль

Если вы хотите более подробно погрузиться в детали читайте DOCUMENTATION.md, либо смотрите polygon.cpp и polygon.h.

Требования

Для установки и запуска проекта, необходимо скачать библиотеку wxWidgwts c сайта https://www.wxwidgets.org/downloads/ раздел Binaries. Также распакуйте архивы на корневой диск С.

Тестирование

Для теcтирования библиотеки использовалась сторонняя библиотека googletest. Чтобы подключить ее, нужно соединить файлы в cmake, например:

add_executable(Google_Test_readfile_run tests/test_readfile.cpp src/readfile.cpp)
target_link_libraries(Google_Test_readfile_run gtest gtest_main)

Примеры тестов можно увидеть в файлах test_polygon.cpp и test_readfile.cpp для тестирования файла polygon.cpp и readfile.cpp соответсвенно. В файле с тестами также надо подключить gtest через #include <gtest/gtest.h> Пример одного из тестов:

TEST(intersect_polygon_field_final_test, single_pn_test2) {
    std::string input = "03 1 1 2 3 3 2";
    input = edit_file(input);
    PolygonField pn_field;
    pn_field.input_polygons(input);
    Polygon res = pn_field.intersect_polygon_field_final();

    std::vector<Point> pn_points{{1, 1}, {2, 3}, {3, 2}};
    EXPECT_EQ(res.get_num_vertices(), 3);
    EXPECT_EQ(res.get_vertices(), pn_points);

    pn_points = {{1.0 + eps, 1}, {2, 3}, {3, 2}};
    for (size_t i = 0; i < pn_points.size(); i++) {
        EXPECT_TRUE(pn_points[i] == res.get_vertices()[i]);
    }
    EXPECT_EQ(res.get_vertices(), pn_points);

    pn_points = {{2, 3}, {1, 1}, {3, 2}};
    EXPECT_NE(res.get_vertices(), pn_points);
}

После объвления всех тестов необходимо вызвать функцию main следующим образом:

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);

    return RUN_ALL_TESTS();
}

Contributing

В случае, если вы хотите поучаствовать в нашем проекте, то все условия прописаны в CONTRIBUTING.md.

FAQ

Как именно работает библиотека?

Библиотека рассматривает входной файл на предмет " 0x ", где x - цифра(3-9), затем считывает числа после символа, считая, что это координаты некоторого многоугольника. Затем находится пересечение итоговое всех многоугольников.

Зачем вы разработали этот проект?

Проектная работа в рамках курса "Технологии программирования (язык программирования С++)" студентов НИУ ВШЭ НН. Основная цель нашего проекта - командная работа (отношения в команде, распределение обязанностей), работа с Github, работа с библиотеками (GoogleTest, SFML)

To do

  • Добавить крутое README
  • Жестко затестить код
  • Достроить нахождение площади
  • Подправить лицензию
  • Добавить менеджер файлов
  • Дописать readme
  • Досторить многоугольники

Команда проекта

Источники

  • Райан Гослинг
  • Дарт Вейдер

About

Intersecting polygons with some complications

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors