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 обозначает количество вершин, а следующим за ним числа - вершины многоугольника. Выдвигается гипотеза, что итоговое пересечение многоугольников является ключом для дешифровки.
Цель: Найти область пересечения многоугольников.
проект реализован на 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.md.
Как именно работает библиотека?
Библиотека рассматривает входной файл на предмет " 0x ", где x - цифра(3-9), затем считывает числа после символа, считая, что это координаты некоторого многоугольника. Затем находится пересечение итоговое всех многоугольников.
Проектная работа в рамках курса "Технологии программирования (язык программирования С++)" студентов НИУ ВШЭ НН. Основная цель нашего проекта - командная работа (отношения в команде, распределение обязанностей), работа с Github, работа с библиотеками (GoogleTest, SFML)
- Добавить крутое README
- Жестко затестить код
- Достроить нахождение площади
- Подправить лицензию
- Добавить менеджер файлов
- Дописать readme
- Досторить многоугольники
-
Даниил Холяк - Backend (основная структура математического кода) + Team leader
-
Андрей Подвигин - Testing + File decoding (работа с GoogleTest)
-
Денис Степанов - Code Organization + Graphics (CMake, Github)
-
Алина Гайсина - Testing + Public Relations + Graphics
Для обратной связи вы можете написать нашему менеджеру - Алина Гайсина
- Райан Гослинг
- Дарт Вейдер
