Ошибка с функцией плоскости has_on в cgal? - PullRequest
0 голосов
/ 01 апреля 2020

В моей программе у меня есть

#include <CGAL/Simple_cartesian.h>
typedef CGAL::Simple_cartesian<double> K;
typedef K::FT FT;
typedef K::Ray_3 Ray;
typedef K::Line_3 Line;
typedef K::Point_3 Point;
typedef K::Segment_3 Segment;
typedef K::Triangle_3 Triangle;
typedef K::Plane_3 Plane;
#include <QMainWindow>
int main(int argc, char *argv[])
{
    Point p0(0.103835, -0.0921626, -2.2133);
    Point p1(0.165068, -0.0411001, -2.28194);
    Point p2(0.0954547, -0.0170658, -2.23422);
    Plane plane(p0, p1, p2);
    std::cout << plane.has_on(p0) << std::endl;
    std::cout << plane.has_on(p1) << std::endl;
    std::cout << plane.has_on(p2) << std::endl;
}

Тогда вывод будет

0
1
1

, но правильный результат должен быть:

1
1
1

И если я измените Ядро K как

typedef CGAL::Simple_cartesian<float> K

Тогда результат будет правильным.

И если я изменю Ядро K как

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;

Тогда выведите

0
0
0

Так в чем проблема? Есть ли ошибка?

1 Ответ

0 голосов
/ 01 апреля 2020

Поскольку плоскость хранится в виде уравнения, вы должны использовать CGAL::Exact_predicates_exact_constructions_kernel. CGAL::Exact_predicates_inexact_constructions_kernel вам понадобится только в том случае, если вы прошли ориентационные тесты с 4 точками.

...