mirror of https://github.com/CGAL/cgal
commmit changes done in the base directory of the package
This commit is contained in:
parent
17027554d0
commit
db52f5b64f
|
|
@ -441,8 +441,8 @@ private:
|
||||||
Point p2 = f->vertex(2)->point();
|
Point p2 = f->vertex(2)->point();
|
||||||
|
|
||||||
Vector_3 v0 = Vector_3(p0.x()*p0.x() + p0.y()*p0.y(),
|
Vector_3 v0 = Vector_3(p0.x()*p0.x() + p0.y()*p0.y(),
|
||||||
p1.x()*p1.x() + p1.y()*p1.y(),
|
p1.x()*p1.x() + p1.y()*p1.y(),
|
||||||
p2.x()*p2.x() + p2.y()*p2.y());
|
p2.x()*p2.x() + p2.y()*p2.y());
|
||||||
|
|
||||||
Vector_3 v1 = Vector_3(p0.x(), p1.x(), p2.x());
|
Vector_3 v1 = Vector_3(p0.x(), p1.x(), p2.x());
|
||||||
Vector_3 v2 = Vector_3(p0.y(), p1.y(), p2.y());
|
Vector_3 v2 = Vector_3(p0.y(), p1.y(), p2.y());
|
||||||
|
|
@ -455,69 +455,6 @@ private:
|
||||||
return dt0*dt0 + dt1*dt1 - dt2*dt2 < 0;
|
return dt0*dt0 + dt1*dt1 - dt2*dt2 < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// assume f is "non-hyperbolic"
|
|
||||||
bool operator() (const Face_handle& f, int i) const
|
|
||||||
{
|
|
||||||
typedef typename Gt::Vector_2 Vector_2;
|
|
||||||
typedef typename Gt::Vector_3 Vector_3;
|
|
||||||
typedef typename Gt::Point_3 Point_3;
|
|
||||||
|
|
||||||
Point p0 = f->vertex(cw(i))->point();
|
|
||||||
Point p1 = f->vertex(ccw(i))->point();
|
|
||||||
Point q0 = f->vertex(i)->point();
|
|
||||||
|
|
||||||
FT p0p0 = p0.x()*p0.x() + p0.y()*p0.y();
|
|
||||||
FT p1p1 = p1.x()*p1.x() + p1.y()*p1.y();
|
|
||||||
FT q0q0 = q0.x()*q0.x() + q0.y()*q0.y();
|
|
||||||
|
|
||||||
Vector_3 v0 = Vector_3(2*p0.x(), 2*p1.x(), 2*q0.x());
|
|
||||||
Vector_3 v1 = Vector_3(2*p0.y(), 2*p1.y(), 2*q0.y());
|
|
||||||
Vector_3 v2 = Vector_3(FT(-1), FT(-1), FT(-1));
|
|
||||||
Vector_3 v = Vector_3(p0p0, p1p1, q0q0);
|
|
||||||
|
|
||||||
FT x = CGAL::determinant(v, v1, v2);
|
|
||||||
FT y = CGAL::determinant(v0, v, v2);
|
|
||||||
FT z = CGAL::determinant(v0, v1, v);
|
|
||||||
|
|
||||||
FT t = CGAL::determinant(v0, v1, v2);
|
|
||||||
|
|
||||||
Point_3 A = Point_3(x/t, y/t, z/t);
|
|
||||||
|
|
||||||
Vector_3 norm_p0(2*p0.x(), 2*p0.y(), FT(-1));
|
|
||||||
Vector_3 norm_p1(2*p1.x(), 2*p1.y(), FT(-1));
|
|
||||||
Vector_3 norm_q0(2*q0.x(), 2*q0.y(), FT(-1));
|
|
||||||
|
|
||||||
Vector_3 main_direction = CGAL::cross_product(norm_p0, norm_p1);
|
|
||||||
|
|
||||||
if(main_direction * norm_q0 > 0) {
|
|
||||||
main_direction = -main_direction;
|
|
||||||
}
|
|
||||||
//std::cout << "direction " << main_direction << std::endl;
|
|
||||||
|
|
||||||
Vector_3 temp = Vector_3(-q0.x(), -q0.y(), 1 - q0q0);
|
|
||||||
assert(temp * norm_q0 < 0);
|
|
||||||
|
|
||||||
FT k = (1 + A.z())/(2*main_direction.z());
|
|
||||||
if (k < 0) {
|
|
||||||
k = -k;
|
|
||||||
}
|
|
||||||
|
|
||||||
Point_3 B = Point_3();
|
|
||||||
if(A.z() + main_direction.z() < -1) {
|
|
||||||
B = A + k*main_direction;
|
|
||||||
} else {
|
|
||||||
B = A + main_direction;
|
|
||||||
}
|
|
||||||
|
|
||||||
Point phiA = Point((2.0*A.x())/(1.0 + A.z()), (2.0*A.y())/(1.0 + A.z()));
|
|
||||||
Point phiB = Point((2.0*B.x())/(1.0 + B.z()), (2.0*B.y())/(1.0 + B.z()));
|
|
||||||
|
|
||||||
Vector_2 phiAB = Vector_2(phiA, phiB);
|
|
||||||
Vector_2 phiOA = Vector_2(Point(0, 0), phiA);
|
|
||||||
|
|
||||||
return phiAB*phiOA < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// assume the incident faces are "non-hyperbolic"
|
// assume the incident faces are "non-hyperbolic"
|
||||||
bool operator() (const Edge& e) const
|
bool operator() (const Edge& e) const
|
||||||
{
|
{
|
||||||
|
|
@ -528,8 +465,9 @@ private:
|
||||||
Point p0 = e.first->vertex(cw(e.second))->point();
|
Point p0 = e.first->vertex(cw(e.second))->point();
|
||||||
Point p1 = e.first->vertex(ccw(e.second))->point();
|
Point p1 = e.first->vertex(ccw(e.second))->point();
|
||||||
|
|
||||||
|
// vertices opposite to p0 and p1
|
||||||
Point q0 = e.first->vertex(e.second)->point();
|
Point q0 = e.first->vertex(e.second)->point();
|
||||||
// neighbor of e.first
|
|
||||||
Face_handle f = e.first->neighbor(e.second);
|
Face_handle f = e.first->neighbor(e.second);
|
||||||
int ind = f->index(e.first);
|
int ind = f->index(e.first);
|
||||||
Point q1 = f->vertex(ind);
|
Point q1 = f->vertex(ind);
|
||||||
|
|
@ -590,7 +528,7 @@ private:
|
||||||
if(Is_hyperbolic()(f) == false) {
|
if(Is_hyperbolic()(f) == false) {
|
||||||
|
|
||||||
info.set_finite_invisible(true);
|
info.set_finite_invisible(true);
|
||||||
info.set_invisible_edge(find_invisible_edge_2(f));
|
info.set_invisible_edge(find_invisible_edge(f));
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
@ -634,18 +572,6 @@ private:
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char find_invisible_edge_2(const Face_handle& f) const
|
|
||||||
{
|
|
||||||
|
|
||||||
if( Is_hyperbolic()(f, 0) == false ) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if( Is_hyperbolic()(f, 1) == false ) {
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
Mark_face(const Mark_face&);
|
Mark_face(const Mark_face&);
|
||||||
Mark_face& operator= (const Mark_face&);
|
Mark_face& operator= (const Mark_face&);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,9 @@
|
||||||
#include "boost/variant.hpp"
|
#include "boost/variant.hpp"
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template < class R >
|
template < class R >
|
||||||
class Triangulation_hyperbolic_traits_2 {
|
class Triangulation_hyperbolic_traits_2 {
|
||||||
public:
|
public:
|
||||||
|
|
@ -122,7 +124,8 @@ namespace CGAL {
|
||||||
FT radius = Compute_squared_distance_2()(p, center);
|
FT radius = Compute_squared_distance_2()(p, center);
|
||||||
|
|
||||||
Circle_2 circle( center, radius);
|
Circle_2 circle( center, radius);
|
||||||
assert(circle.has_on_boundary(p) && circle.has_on_boundary(q));
|
// uncomment!!!
|
||||||
|
//assert(circle.has_on_boundary(p) && circle.has_on_boundary(q));
|
||||||
|
|
||||||
if(Orientation_2()(p, q, center) == LEFT_TURN) {
|
if(Orientation_2()(p, q, center) == LEFT_TURN) {
|
||||||
return Arc_2(circle, p, q);
|
return Arc_2(circle, p, q);
|
||||||
|
|
@ -207,7 +210,7 @@ namespace CGAL {
|
||||||
//typedef Line_2 Line;
|
//typedef Line_2 Line;
|
||||||
|
|
||||||
Triangulation_hyperbolic_traits_2() :
|
Triangulation_hyperbolic_traits_2() :
|
||||||
_unit_circle(Point_2(0, 0), 100*100)
|
_unit_circle(Point_2(0, 0), 1*1)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Triangulation_hyperbolic_traits_2(FT r) :
|
Triangulation_hyperbolic_traits_2(FT r) :
|
||||||
|
|
@ -220,7 +223,9 @@ namespace CGAL {
|
||||||
|
|
||||||
Triangulation_hyperbolic_traits_2 &operator=
|
Triangulation_hyperbolic_traits_2 &operator=
|
||||||
(const Triangulation_hyperbolic_traits_2 &)
|
(const Triangulation_hyperbolic_traits_2 &)
|
||||||
{ return *this;}
|
{
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
Less_x_2
|
Less_x_2
|
||||||
less_x_2_object() const
|
less_x_2_object() const
|
||||||
|
|
@ -248,7 +253,9 @@ namespace CGAL {
|
||||||
|
|
||||||
Construct_circumcenter_2
|
Construct_circumcenter_2
|
||||||
construct_circumcenter_2_object() const
|
construct_circumcenter_2_object() const
|
||||||
{return Construct_circumcenter_2(_unit_circle);}
|
{
|
||||||
|
return Construct_circumcenter_2(_unit_circle);
|
||||||
|
}
|
||||||
|
|
||||||
class Construct_hyperbolic_bisector_2
|
class Construct_hyperbolic_bisector_2
|
||||||
{
|
{
|
||||||
|
|
@ -421,6 +428,23 @@ namespace CGAL {
|
||||||
Construct_ray_2 construct_ray_2_object() const
|
Construct_ray_2 construct_ray_2_object() const
|
||||||
{return Construct_ray_2(_unit_circle);}
|
{return Construct_ray_2(_unit_circle);}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Take out the code below to some separate file
|
||||||
|
|
||||||
|
#ifdef CGAL_EXACT_PREDICATES_EXACT_CONSTRUCTIONS_KERNEL_H
|
||||||
|
template <>
|
||||||
|
struct Triangulation_structural_filtering_traits< Triangulation_hyperbolic_traits_2<Epeck> > {
|
||||||
|
typedef Tag_true Use_structural_filtering_tag;
|
||||||
|
};
|
||||||
|
#endif // CGAL_EXACT_PREDICATES_EXACT_CONSTRUCTIONS_KERNEL_H
|
||||||
|
|
||||||
|
#ifdef CGAL_EXACT_PREDICATES_INEXACT_CONSTRUCTIONS_KERNEL_H
|
||||||
|
template <>
|
||||||
|
struct Triangulation_structural_filtering_traits< Triangulation_hyperbolic_traits_2<Epick> > {
|
||||||
|
typedef Tag_true Use_structural_filtering_tag;
|
||||||
|
};
|
||||||
|
#endif // CGAL_EXACT_PREDICATES_INEXACT_CONSTRUCTIONS_KERNEL_H
|
||||||
|
|
||||||
} //namespace CGAL
|
} //namespace CGAL
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue