1
저는 CGAL에서 최신 버전이고, .locate() 함수를 사용하여 삼각형 모양의 점을 찾으려면 몇 가지 문제가 있습니다.locate 기능의 버그?
: 먼저 나는 3 점 (-1,0) (1,0) (0,1), 가 그럼 난 점은, 삼각형과 몇 가지 포인트 '상대 위치를 확인하여 삼각형을 구축p0(0.8, 0.1) ---- locate in the triangle; p1(0.95, 0) ---- locate on the edge (-1,0) ---- (1,0); p2(0.8, 0.2) ---- locate on the edge (1,0) ---- (0,1); p3(0.6, 0.4) ---- locate on the edge (1,0) ---- (0,1); p4(0.7,0.3) ---- locate on the edge (1,0) ---- (0,1);
하지만 케이트 결과는 :
p0 ---- FACE, right! p1 ---- EDGE, right! p2 ---- OUTSIDE_CONVEX_HULL, wrong! p3 ---- EDGE, right! p4 ---- FACE, wrong!
, 점 P2는 P3가 P4가 같은 에지 (1,0) 위치에있는 동안 ---- (0,1)
문제의 원인은 무엇입니까?
코드 : 부동 소수점 숫자가 하나가 쓸 수있는 모든 진수를 나타낼 수 없습니다
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Delaunay_triangulation;
void main()
{
//generate the triangles
std::vector<Point2> pts;
pts.push_back(Point2(1,0));
pts.push_back(Point2(-1,0));
pts.push_back(Point2(0,1));
Delaunay_triangulation dt;
dt.insert(pts.begin(), pts.end());
//locate point in the triangle
Point2 pt0 = Point2(0.8, 0.1);//the point located in the triangle.(on the FACE ?)
Point2 pt1 = Point2(0.95, 0);//the point located on the segment ((1,0) ---- (-1,0)) (on the EDGE ?)
Point2 pt2 = Point2(0.8, 0.2);//the point locate on the segment ((1,0) ---- (0,1)) (on the EDGE ?)
Point2 pt3 = Point2(0.6, 0.4);//the point locate on the segment ((1,0) ---- (0,1)) (on the EDGE ?)
Point2 pt4 = Point2(0.7,0.3);//the point locate on the segment ((1,0) --- (0,1)) (on the EDGE ?)
Face_handle fh0, fh1, fh2, fh3, fh4;
Delaunay_triangulation::Locate_type lt0, lt1, lt2, lt3, lt4;
int li;
fh0 = dt.locate(pt0, lt0, li);//for pt0, lt0 is equal to FACE, right!
fh1 = dt.locate(pt1, lt1, li);//for pt1, lt1 is equal to EDGE, right!
fh2 = dt.locate(pt2, lt2, li);//for pt2, lt2 is equal to OUTSIDE_CONVEX_HULL, I think it's wrong!
fh3 = dt.locate(pt3, lt3, li);//for pt3, lt3 is equal to EDGE, right!
fh4 = dt.locate(pt4, lt4, li);//for pt4, lt3 is equal to FACE, I thing it's wrong!
}
도움 주셔서 감사합니다. – ffmm3