Subject: CGAL users discussion list
List archive
Re: [cgal-discuss] Adding a ray extension intersection point into an arrangment
Chronological Thread
- From: Efi Fogel <>
- To:
- Subject: Re: [cgal-discuss] Adding a ray extension intersection point into an arrangment
- Date: Sun, 16 Mar 2014 20:40:20 +0200
Don't use an inexact number type, such as double.
Use the Exact_predicates_exact_constructions_kernel. ____ _ ____ _
/_____/_) o /__________ __ //
(____ ( ( ( (_/ (_/-(-'_(/
_/
/_____/_) o /__________ __ //
(____ ( ( ( (_/ (_/-(-'_(/
_/
On Sun, Mar 16, 2014 at 8:30 PM, dg <> wrote:
Hello all,
I am trying to extend an edge of an arrangement and getting its intersection
point with the existing edges. Now, I want to add this new edge into the
arrangement. However, the edge is added, it is not properly added into the
arrangement and the face is not split of the arrangement (i think due to
precision problem).
Here is the relevant part of the code -
typedef double Number_type;
typedef CGAL::Exact_predicates_exact_constructions_kernel K;
typedef CGAL::Simple_cartesian<Number_type> Kernel;
typedef CGAL::Arr_segment_traits_2<Kernel> Traits_2;
typedef Traits_2::Point_2 Point_2;
typedef Traits_2::Ray_2 Ray_2;
typedef Traits_2::X_monotone_curve_2 Segment_2;
typedef CGAL::Arrangement_2<Traits_2> Arrangement_2;
typedef Arrangement_2::Vertex_handle Vertex_handle;
typedef Arrangement_2::Halfedge_handle Halfedge_handle;
const K::Point_2 p1 = K::Point_2(rcurves[i].source().hx(),
rcurves[i].source().hy());
const K::Point_2 p2 = K::Point_2(rcurves[i].target().hx(),
rcurves[i].target().hy());
K::Ray_2 r1 = K::Ray_2(p1,p2); //rcurves[i].source() , rcurves[i].target()
);
//rcurves[i].source() , rcurves[i].target() );
cout<<"Ray # = "<<i<<" "
<<r1.source().hx()<<"
"<<r1.source().hy()<<"
"<<r1.direction()<<endl;
Arrangement_2::Edge_const_iterator eit;
CGAL::Object obj;
int j=0;
// Try inserting the ray directly ..
Arrangement_2::Halfedge_const_iterator hit;
hit = arr.halfedges_begin();
for(int j=0; j<=arr.number_of_edges(); j++)
{
CGAL::Object resObj;
K::Point_2 ipoint;
K::Segment_2
tseg(K::Point_2(hit->curve().source().hx(),hit->curve().source().hy()) ,
K::Point_2(hit->curve().target().hx(), hit->curve().target().hy()) );
resObj = CGAL::intersection(r1, tseg);
if (assign(ipoint, resObj)) {
cout<<"It intersects at point"<<endl;// handle the point intersection
case.
cout<<"check Intersecting point =
["<<ipoint.x()<<"
"<<ipoint.y()<<"]"<<endl;
insert_non_intersecting_curve (arr, Segment_2(Point_2(rvertices[i].x(),
rvertices[i].y()), Point_2(CGAL::to_double(ipoint.hx()),
CGAL::to_double(ipoint.hy()))) );
}
hit= hit->next();
}
Here is an image -
<http://cgal-discuss.949826.n4.nabble.com/file/n4658967/Screenshot_2014-03-16_14.23.49.png>
Here as I have inserted a new edge into the arrangement ideally it should
split the face and then we should have three faces. Instead it just adds the
vertex with a degree 1 and arrangment is not properly modified. I believe
there is some precision problem.
Can anyone point to me the solution of this.
Thanks.
--
View this message in context: http://cgal-discuss.949826.n4.nabble.com/Adding-a-ray-extension-intersection-point-into-an-arrangment-tp4658967.html
Sent from the cgal-discuss mailing list archive at Nabble.com.
--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss
- [cgal-discuss] Adding a ray extension intersection point into an arrangment, dg, 03/16/2014
- Re: [cgal-discuss] Adding a ray extension intersection point into an arrangment, Efi Fogel, 03/16/2014
- Re: [cgal-discuss] Adding a ray extension intersection point into an arrangment, dg, 03/16/2014
- Re: [cgal-discuss] Adding a ray extension intersection point into an arrangment, Efi Fogel, 03/16/2014
- Re: [cgal-discuss] Adding a ray extension intersection point into an arrangment, dg, 03/16/2014
- Re: [cgal-discuss] Adding a ray extension intersection point into an arrangment, Efi Fogel, 03/16/2014
Archive powered by MHonArc 2.6.18.