Недавно я обнаружил, что полигон надстройки только для целых чисел: В чем полезность Boost Polygon?
Я работаю над этим путем умножения моих значений с плавающей запятой на большую экспоненту, а затем перенормировки вывода из библиотеки, но по умолчанию внутреннее представление кажется 32-битным и не работает, когда мой ввод превышает max int в 2 миллиарда или около того.
Есть ли способ заставить библиотеку работать с 64-битными целыми числами?
например: http://www.boost.org/doc/libs/1_62_0/libs/polygon/doc/tutorial/minkowski.cpp
с моими наивными модификациями:
typedef boost::polygon::point_data<long long int> point;
typedef boost::polygon::polygon_set_data<long long int> polygon_set;
typedef boost::polygon::polygon_with_holes_data<long long int> polygon;
...
int main(int argc, char **argv) {
polygon_set a, b, c;
a += boost::polygon::rectangle_data<long long int>(0, 0, 10000000000, 10000000000);
std::vector<polygon> polys;
b += boost::polygon::rectangle_data<long long int>(0, 0, 10000000000, 10000000000);
polys.clear();
convolve_two_polygon_sets(c, a, b);
c.get(polys);
for(int i = 0; i < polys.size(); ++i ){
std::cout << polys[i] << std::endl;
}
return 0;
}
это выдает многоугольник, но только для прямоугольников, меньших, чем max int. Входные данные длинные, но я предполагаю, что они все еще 32-битные. Я понимаю, что должен определить новую структуру Point и использовать ее, но не уверен, насколько конкретно.
Задача ещё не решена.
Других решений пока нет …