CGAL: Какое ядро ​​использовать для 2D-многогранников с плавающими координатами? - PullRequest
0 голосов
/ 20 июня 2020

Я немного упростил этот пример из онлайн-руководства CGAL - см. Ниже:

#include <CGAL/Exact_integer.h>
#include <CGAL/Filtered_extended_homogeneous.h>
#include <CGAL/Nef_polyhedron_2.h>

using Kernel = CGAL::Filtered_extended_homogeneous<CGAL::Exact_integer>;
using Polyhedron = CGAL::Nef_polyhedron_2<Kernel>;
using Line = Polyhedron::Line;

int main()
{
  Line l(2, 4, 2);  
}

Эту программу можно скомпилировать и выполнить без проблем. Затем я изменил один аргумент для конструктора Line, чтобы сделать его нецелым числом:

Line l(2, 4, 2.5);

Мой компилятор отказался его компилировать:

/home/hekto/EX/test.cpp: In function ‘int main()’:
/home/hekto/EX/test.cpp:21:19: error: no matching function for call to ‘CGAL::Line_2<CGAL::Homogeneous<boost::multiprecision::number<boost::multiprecision::backends::gmp_int>, CGAL::Quotient<boost::multiprecision::number<boost::multiprecision::backends::gmp_int> > > >::Line_2(int, int, double)’
   Line l(2, 4, 2.5);
                   ^

... и много других сообщений.

Также я пытался заменить тип Exact_integer типом MP_Float. Конструктор Line был скомпилирован нормально, но конструктор Polyhedron выдал мне длинный список ошибок. Источник ниже:

#include <CGAL/MP_Float.h>
#include <CGAL/Filtered_extended_homogeneous.h>
#include <CGAL/Nef_polyhedron_2.h>

using Kernel = CGAL::Filtered_extended_homogeneous<CGAL::MP_Float>;
using Polyhedron = CGAL::Nef_polyhedron_2<Kernel>;
using Line = Polyhedron::Line;

int main()
{
  Line l(2, 4, 2);  
  Polyhedron p(l);  
}

Компилятор пожаловался на несуществующий operator/= для операндов с типом CGAL::MP_Float.

Поддерживает ли CGAL числа с плавающей запятой для двумерных многогранников? Если да, то какое ядро ​​выбрать?

  • ОС: Ubuntu 18.04.4
  • Компилятор: g ++ (Ubuntu 7.5.0-3ubuntu1 ~ 18.04) 7.5.0
...