56
56
template<class SCALAR_TYPE>
57
57
inline bool Convex(const Point2<SCALAR_TYPE> & p0,const Point2<SCALAR_TYPE> & p1,const Point2<SCALAR_TYPE> & p2)
59
const SCALAR_TYPE EPSILON= SCALAR_TYPE(1e-8);
60
return (((p0-p1)^(p2-p1))<=EPSILON);
59
const SCALAR_TYPE EPS= SCALAR_TYPE(1e-8);
60
return (((p0-p1)^(p2-p1))<=EPS);
63
63
///return if exist the intersection point
67
67
const vcg::Line2<SCALAR_TYPE> & l1,
68
68
Point2<SCALAR_TYPE> &p)
70
const SCALAR_TYPE EPSILON= SCALAR_TYPE(1e-8);
70
const SCALAR_TYPE Eps= SCALAR_TYPE(1e-8);
72
72
SCALAR_TYPE x1=l0.Origin().X();
73
73
SCALAR_TYPE y1=l0.Origin().Y();
165
165
const vcg::Segment2<SCALAR_TYPE> &seg1,
166
166
Point2<SCALAR_TYPE> &p_inters)
168
///test intersection of bbox
169
vcg::Box2<SCALAR_TYPE> bb0,bb1;
174
if (!bb0.Collide(bb1))
178
///first compute intersection between lines
179
vcg::Line2<SCALAR_TYPE> l0,l1;
181
l0.SetOrigin(seg0.P0());
182
vcg::Point2<SCALAR_TYPE> dir0=seg0.P1()-seg0.P0();
184
l0.SetDirection(dir0);
185
l1.SetOrigin(seg1.P0());
186
vcg::Point2<SCALAR_TYPE> dir1=seg1.P1()-seg1.P0();
188
l1.SetDirection(dir1);
189
return ((LineSegmentIntersection<SCALAR_TYPE>(l0,seg1,p_inters))&&
190
(LineSegmentIntersection<SCALAR_TYPE>(l1,seg0,p_inters)));
168
vcg::Line2<SCALAR_TYPE> l0,l1;
170
l0.SetOrigin(seg0.P0());
171
vcg::Point2<SCALAR_TYPE> dir0=seg0.P1()-seg0.P0();
173
l0.SetDirection(dir0);
175
l1.SetOrigin(seg1.P0());
176
vcg::Point2<SCALAR_TYPE> dir1=seg1.P1()-seg1.P0();
178
l1.SetDirection(dir1);
179
bool b=LineLineIntersection(l0,l1,p_inters);
180
SCALAR_TYPE len0=seg0.Length();
181
SCALAR_TYPE len1=seg1.Length();
182
SCALAR_TYPE d0=(seg0.P0()-p_inters).Norm();
183
SCALAR_TYPE d1=(seg1.P0()-p_inters).Norm();
185
if ((d0>len0)||(d1>len1))
188
vcg::Point2<SCALAR_TYPE> dir2=p_inters-seg0.P0();
189
vcg::Point2<SCALAR_TYPE> dir3=p_inters-seg1.P0();
190
if (((dir2*dir0)<0)||((dir3*dir1)<0))
194
196
/// interseciton between point and triangle
195
197
template<class SCALAR_TYPE>
196
198
inline bool IsInsideTrianglePoint( const Triangle2<SCALAR_TYPE> & t,const Point2<SCALAR_TYPE> & p)
217
219
//intersection between a circle and a line
218
template<class SCALAR_TYPE>
219
inline bool CircleLineIntersection(const vcg::Line2<SCALAR_TYPE> & line,
220
const vcg::Point2<SCALAR_TYPE> ¢er,
221
const SCALAR_TYPE &radius,
222
vcg::Point2<SCALAR_TYPE> &p0,
223
vcg::Point2<SCALAR_TYPE> &p1)
220
template<class ScalarType>
221
inline bool CircleLineIntersection(const vcg::Line2<ScalarType> & line,
222
const vcg::Point2<ScalarType> ¢er,
223
const ScalarType &radius,
224
vcg::Point2<ScalarType> &p0,
225
vcg::Point2<ScalarType> &p1)
225
typedef typename SCALAR_TYPE ScalarType;
227
227
///translate with origin on the center
228
228
ScalarType x1,x2,y1,y2;
229
229
x1=line.Origin().X()-center.X();