Subject: CGAL users discussion list
List archive
- From: "bingxin pu" <>
- To: cgal-discuss <>
- Subject: [cgal-discuss] Get boundary points using Basic Alpha Shapes 2d
- Date: Sun, 29 Jul 2018 23:08:20 +0800 (GMT+08:00)
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
- Ironport-phdr: 9a23:1VH6oR/J0mfaZ/9uRHKM819IXTAuvvDOBiVQ1KB40OocTK2v8tzYMVDF4r011RmVBduds6oMotGVmpioYXYH75eFvSJKW713fDhBt/8rmRc9CtWOE0zxIa2iRSU7GMNfSA0tpCnjYgBaF8nkelLdvGC54yIMFRXjLwp1Ifn+FpLPg8it2O2+55zebx9UiDahfLh/MAi4oQLNu8cMnIBsMLwxyhzHontJf+RZ22ZlLk+Nkhj/+8m94odt/zxftPw9+cFAV776f7kjQrxDEDsmKWE169b1uhTFUACC+2ETUmQSkhpPHgjF8BT3VYr/vyfmquZw3jSRMMvrRr42RDui9b9mSB7mhikHKTA37XvZhMtsg61UoxysvBl/z5LObY6OLvdyYqHQcNUHTmRBRMZRUClBD5uyY4QUDuoBO+lYrob8p1sIsBC+HRSsCO3ywTJPnXD23Ks60+suEAHH2gwvB8oOsGnPodnoNaofX/q5w7XPzTXGdv5b3yr25ovQch05v/2AQ658fdDMxUQsCg/JlEicpIL/Mz+I1OkBr3CX4/d9We6ykWIrtR19rzi1yssyl4XEhZgZx1TK+Ch/3Y07P8e3SFRhbt6hCJZQtz+VN49xQs46RmFkpSg3xqQbtZO5YCQG0okryh/RZvCdb4eI5RfjWP6QITd+mn1lZKqyiwis/US80OHwS8q53EtQoiZYnNTArG0B2h7P5sSfT/ty5Eah2TKB1wDJ7eFEJFg5mrHaK54nzb4xmZsTsULbES/uhUX7l7Kae0Qq9+Sy9+vnZbDmqoeGN4BokgH+LrgumsunDOskPQgBRWyb9f2h273i5k32XKhKjuYtkqTCq5DbJcEbprajDANP04Yj7Qy/Dza839gCk3kHNgENRBXShIfgPxTCIevzEOykywCnnz5vgvzHJbb8GY7lL37Zkb6nc6wruGBGzw9mh9pe4Z1EC7dJOO+5Ehv7tdrXHh4/BBSp67+5U5N20YZICjHHObOQLK6H6QzA3ekoOeTZPNZE6ga4EOAs4rvVtVF8nFYceaez2p5GOinmRbJtJEDLOCOw0OdEKn8Du08FdMKvkEeLAGwKOS30VKU5tGliVdCWSLzbT4Xou4SvmSe2GpoPOTJDUwvJSCiwMdzaALEHbyfAesI=
Hi everyone,
I use Basic Alpha Shapes to get boundary points from some 2d points. As shown in attachments, boundary points like a rectangle is what I want to get. But I failed. Through seeing demo about Alpha_shapes_2, I think that I maybe set a wrong Alpha. I hope that you can give me some suggestions so that I can get correct result.
The wrong boundary points is result of the following code.
- typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
- typedef K::FT FT;
- typedef K::Point_2 Point;
- typedef K::Segment_2 Segment;
- typedef CGAL::Alpha_shape_vertex_base_2<K> Vb;
- typedef CGAL::Alpha_shape_face_base_2<K> Fb;
- typedef CGAL::Triangulation_data_structure_2<Vb,Fb> Tds;
- typedef CGAL::Delaunay_triangulation_2<K,Tds> Triangulation_2;
- typedef CGAL::Alpha_shape_2<Triangulation_2> Alpha_shape_2;
- typedef Alpha_shape_2::Alpha_shape_edges_iterator Alpha_shape_edges_iterator;
- template <class OutputIterator>
- void alpha_edges( const Alpha_shape_2& A, OutputIterator out)
- {
- Alpha_shape_edges_iterator it = A.alpha_shape_edges_begin(),
- end = A.alpha_shape_edges_end();
- for (; it != end; ++it)
- out++ = A.segment(*it);
- }
- bool file_input(std::list<Point> &points)
- {
- std::ifstream is("J:\\General_Random_points2D.pts", std::ios::in);
- if(is.fail())
- {
- std::cerr << "unable to open file for input" << std::endl;
- return false;
- }
- Point p;
- for (int i = 0; i < 2000; i++)
- {
- is >> p;
- points.push_back(p);
- }
- CGAL::set_pretty_mode(std::cout);
- std::cout << p << std::endl;
- return true;
- }
- // Reads a list of points and returns a list of segments
- // corresponding to the Alpha shape.
- int main()
- {
- std::list<Point> points;
- if(! file_input(points))
- return -1;
- Alpha_shape_2 A(points.begin(), points.end(),
- FT(10000),
- Alpha_shape_2::GENERAL);
- std::vector<Segment> segments;
- alpha_edges(A, std::back_inserter(segments));
- std::ofstream of("vertix.pts");
- CGAL::set_ascii_mode(of);
- CGAL::set_pretty_mode(std::cout);
- for (int i = 0; i < segments.size(); i++)
- {
- of << segments[i].vertex(1) << std::endl << segments[i].vertex(2) << std::endl;
- }
- std::cout << "Alpha Shape computed" << std::endl;
- std::cout << segments.size() << " alpha shape edges" << std::endl;
- std::cout << "Optimal alpha: " << *A.find_optimal_alpha(1)<<std::endl;
- system("pause");
- return 0;
- }
Thank you, in advance. I will be honored to receive your help.
bingxin
发自网易邮箱大师
Attachment:
boundary_points.png
Description: PNG image
- [cgal-discuss] Get boundary points using Basic Alpha Shapes 2d, bingxin pu, 07/29/2018
- Re: [cgal-discuss] Get boundary points using Basic Alpha Shapes 2d, Renato Silveira, 07/31/2018
Archive powered by MHonArc 2.6.18.