mirror of https://github.com/CGAL/cgal
Fix typos
This commit is contained in:
parent
934544dbde
commit
2848158354
|
|
@ -130,7 +130,7 @@ We define the *plausibility* grade \f$ p(t) \f$ as \f$ 1/r_t \f$, if
|
|||
|
||||
Let's have a look at the figure below.
|
||||
\cgalFigureBegin{figAFSRplausible,wedges.png}
|
||||
Plausibility. Triangle `t'` and incidident triangles sharing edge `e` seen from the side.
|
||||
Plausibility. Triangle `t'` and incident triangles sharing edge `e` seen from the side.
|
||||
\cgalFigureEnd
|
||||
|
||||
\f$ \alpha_\mathrm{sliver}\f$ corresponds to the red wedge. The algorithm will never select triangle `t1`
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ but does not provide any arithmetic operations.
|
|||
|
||||
As for algebraic structures this concept is also traits class oriented.
|
||||
The main functionality related to `RealEmbeddable` is gathered in
|
||||
the class `Real_embeddable_traits`. In particular, it porivdes the boolean
|
||||
the class `Real_embeddable_traits`. In particular, it provides the boolean
|
||||
tag `Is_real_embeddable` indicating whether a type is a model of
|
||||
`RealEmbeddable`. The comparison operators are required to be realized via
|
||||
\cpp operator overloading.
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ namespace CGAL {
|
|||
|
||||
int pos_next_factor;
|
||||
|
||||
// Unsuccessfull shear factors
|
||||
// Unsuccessful shear factors
|
||||
std::set<Int> bad_shears;
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -339,7 +339,7 @@ void test_algebraic_kernel_1(const AlgebraicKernel_d_1& ak_1){
|
|||
c0i != coeffs.end(); c0i++) {
|
||||
for (typename std::vector< int >::const_iterator c2i = coeffs.begin();
|
||||
c2i != coeffs.end(); c2i++) {
|
||||
// we basically test a quadratic polynomial (with choosen small and large
|
||||
// we basically test a quadratic polynomial (with chosen small and large
|
||||
// quadratic and constant coefficient, which is disturbed by a root close to zero).
|
||||
//Polynomial_1 poly((*c2i*x*x - *c0i) * (c*x-1));
|
||||
Polynomial_1 poly((*c2i*x*x - *c0i) * (c*x-1));
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ public:
|
|||
|
||||
// both circles exist
|
||||
|
||||
// check whether the shadow region is connected, i.e., wether it is
|
||||
// check whether the shadow region is connected, i.e., whether it is
|
||||
// of the form (a, b) or (-oo, a) U (b, +oo)
|
||||
Bitangent_line bl_12(p1, p2);
|
||||
|
||||
|
|
@ -524,7 +524,7 @@ public:
|
|||
|
||||
// both circles exist
|
||||
|
||||
// check whether the shadow region is connected, i.e., wether it is
|
||||
// check whether the shadow region is connected, i.e., whether it is
|
||||
// of the form (a, b) or (-oo, a) U (b, +oo)
|
||||
Bitangent_line bl_12(p1, p2);
|
||||
|
||||
|
|
|
|||
|
|
@ -383,7 +383,7 @@ public:
|
|||
|
||||
// both circles exist
|
||||
|
||||
// check whether the shadow region is connected, i.e., wether it is
|
||||
// check whether the shadow region is connected, i.e., whether it is
|
||||
// of the form (a, b) or (-oo, a) U (b, +oo)
|
||||
Bitangent_line bl_12(p1, p2);
|
||||
|
||||
|
|
@ -507,7 +507,7 @@ public:
|
|||
|
||||
// both circles exist
|
||||
|
||||
// check whether the shadow region is connected, i.e., wether it is
|
||||
// check whether the shadow region is connected, i.e., whether it is
|
||||
// of the form (a, b) or (-oo, a) U (b, +oo)
|
||||
Bitangent_line bl_12(p1, p2);
|
||||
|
||||
|
|
@ -581,7 +581,7 @@ public:
|
|||
|
||||
// both circles exist
|
||||
|
||||
// check whether the shadow region is connected, i.e., wether it is
|
||||
// check whether the shadow region is connected, i.e., whether it is
|
||||
// of the form (a, b) or (-oo, a) U (b, +oo)
|
||||
|
||||
return !b;
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@
|
|||
pair of begin/end functions can be changed, so that they return a range of
|
||||
objects that represent either edges or vertices.
|
||||
|
||||
The second problem can be fixed by introducing a heirarchy of 2 layers
|
||||
The second problem can be fixed by introducing a hierarchy of 2 layers
|
||||
to the arrangement with history. The top layer represent the split of
|
||||
general curves into x-monotone curves, and the one below represents the
|
||||
split at intersection points. As a response to a user request for the items
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ Curve_analyser INPUT "P[6(0,P[6(0,34186452217925)(1,-47333108912824)(2,859012718
|
|||
// Same with some content
|
||||
Curve_analyser INPUT "P[6(0,P[10(0,239305165525475)(1,-433891119043543)(2,-105547852922974)(3,544084567642102)(4,-168636318668897)(5,-121992740815323)(6,34879008294620)(7,11799206430140)(8,-36175872)(9,85786624)(10,33947648)])(1,P[9(0,-54239848065004)(1,99913497126828)(2,19760931822856)(3,-122064771317912)(4,42619705096452)(5,24317888697724)(6,-8140916911648)(7,-2166674406544)(8,128057344)(9,59899904)])(2,P[8(0,7433741935312)(1,-9062611931072)(2,-7038911122368)(3,10741692910944)(4,-394721728272)(5,-1679188229536)(6,-164069376)(7,107249664)(8,54984704)])(3,P[7(0,-218665076224)(1,264879835136)(2,207970109440)(3,-313676665856)(4,10561338880)(5,48743222272)(6,133627904)(7,53608448)])(4,P[6(0,68812800)(1,23724032)(2,52953088)(3,-109314048)(4,-168689664)(5,85590016)(6,46923776)])(5,P[5(1,219054080)(2,-93880320)(3,-281640960)(4,93880320)(5,62586880)])(6,P[4(0,28672000)(1,-12288000)(2,-36864000)(3,12288000)(4,8192000)])]"
|
||||
|
||||
hmm smth realy heavy...
|
||||
hmm smth really heavy...
|
||||
P[34(0,P[34(0,12952101536523102192492711540000000)(1,-84147098480789650665250232160000000)(2,-69088664533801811202671946450000000)(3,-12990598879942044092505125010000000)(4,27052642714728288021127698670000000)(5,26683266093731013401148721880000000)(6,5372171464167151111739335793000000)(7,-8934425711222817088377016721000000)(8,-8465742196405103553796952613000000)(9,-1737345552069859077855633714000000)(10,2393898184518898797964635987000000)(11,2234406641615936885853597509000000)(12,479873852041504440602579852100000)(13,-547557654615450328195988452500000)(14,-514849404082170848294946339800000)(15,-115417366169449334489378073500000)(16,113234224818672992436814644400000)(17,107962164812116405549461548900000)(18,25135425283858380820959007860000)(19,-21694664362506393046334314800000)(20,-21025627462526285456489755280000)(21,-5057323915115735386146156273000)(22,3901460484323335482987702100000)(23,3846534854318572165730297444000)(24,950752053910955172204451437900)(25,-665241246757279897517641949200)(26,-666960287213849591322741077200)(27,-168596633306616989111809611900)(28,108415065221291211390422093200)(29,110420084629074642463546936400)(30,28431730759059073988652406240)(31,-16992776198434916741021022360)(32,-17557477656685153453414375500)(33,-4588689239444215584479993393)(34,2574250362779616822482848012)])(2,P[0(0,-123917486647761741318703576800000000)])(4,P[0(0,79246903881551255661144190100000000)])(6,P[0(0,2186663392639010037975810829000000)])(8,P[0(0,-30912413603643981961132659450000000)])(10,P[0(0,22784177877224038711887972820000000)])(12,P[0(0,-8699274014787859551101246025000000)])(14,P[0(0,836940561843498171726587625200000)])(16,P[0(0,1367060050733175030564444040000000)])(18,P[0(0,-1171114486352462799313004128000000)])(20,P[0(0,567955949125204086770735562700000)])(22,P[0(0,-181911283701056707932126214300000)])(24,P[0(0,25732945948997554536421517900000)])(26,P[0(0,13209567106923403694087544950000)])(28,P[0(0,-13184322903675827636908029720000)])(30,P[0(0,6798109015505303221533146500000)])(32,P[0(0,-2528588426392935931038968129000)])(34,P[0(0,669962430844565364862639688900)])]
|
||||
|
||||
Maldenbrot's curve: 0 segments ?
|
||||
|
|
|
|||
|
|
@ -782,7 +782,7 @@ ability to answer such queries effectively.
|
|||
The `Arrangement_2` class template does not support point-location
|
||||
queries directly, as the arrangement representation is decoupled from
|
||||
the geometric algorithms that operate on it. The <I>2D Arrangements</I>
|
||||
package includes a set of classe templates that are capable of
|
||||
package includes a set of class templates that are capable of
|
||||
answering such queries; all are models of the concept
|
||||
`ArrangementPointLocation_2`. Each model employs a different
|
||||
algorithm or <I>strategy</I> for answering queries. A model of this
|
||||
|
|
|
|||
|
|
@ -590,7 +590,7 @@ private:
|
|||
* \param cache Caches the vertical tangency points and intersection points.
|
||||
* \param ipts Output: A vector of intersection points + multiplicities.
|
||||
* \param ovlp_cv Output: An overlapping subcurve (if exists).
|
||||
* \return Whether an overlap has occured.
|
||||
* \return Whether an overlap has occurred.
|
||||
*/
|
||||
bool _intersect (const Self& cv,
|
||||
Intersection_map& inter_map,
|
||||
|
|
@ -1488,14 +1488,14 @@ bool _Bezier_x_monotone_2<RatKer, AlgKer, NtTrt, BndTrt>::_is_in_range
|
|||
|
||||
if ((p_gt_ps && p_lt_pt) || (p_lt_ps && p_gt_pt))
|
||||
{
|
||||
// The point p is definately in the x-range of the subcurve, as its
|
||||
// The point p is definitely in the x-range of the subcurve, as its
|
||||
// parameter is between the source and target parameters.
|
||||
return (true);
|
||||
}
|
||||
|
||||
if ((p_lt_ps && p_lt_pt) || (p_gt_ps && p_gt_pt))
|
||||
{
|
||||
// The point p is definately not in the x-range of the subcurve,
|
||||
// The point p is definitely not in the x-range of the subcurve,
|
||||
// as its parameter is smaller than both source and target parameter
|
||||
// (or greater than both of them).
|
||||
return (false);
|
||||
|
|
@ -1562,14 +1562,14 @@ bool _Bezier_x_monotone_2<RatKer, AlgKer, NtTrt, BndTrt>::_is_in_range
|
|||
|
||||
if ((p_gt_ps && p_lt_pt) || (p_lt_ps && p_gt_pt))
|
||||
{
|
||||
// The point p is definately in the x-range of the subcurve, as its
|
||||
// The point p is definitely in the x-range of the subcurve, as its
|
||||
// parameter is between the source and target parameters.
|
||||
return (true);
|
||||
}
|
||||
|
||||
if ((p_lt_ps && p_lt_pt) || (p_gt_ps && p_gt_pt))
|
||||
{
|
||||
// The point p is definately not in the x-range of the subcurve,
|
||||
// The point p is definitely not in the x-range of the subcurve,
|
||||
// as its parameter is smaller than both source and target parameter
|
||||
// (or greater than both of them).
|
||||
return (false);
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ namespace CGAL {
|
|||
|
||||
/*! \class
|
||||
* A class that answers nearest neighbor queries.
|
||||
* It recieves a set of points, and builds a kd-tree for them.
|
||||
* It receives a set of points, and builds a kd-tree for them.
|
||||
* Given a query point, it finds the closest point to the query.
|
||||
*/
|
||||
template <typename Arrangement_>
|
||||
|
|
|
|||
|
|
@ -719,7 +719,7 @@ public:
|
|||
m_traits->construct_min_vertex_2_object()( ce2.cv()) :
|
||||
m_traits->construct_max_vertex_2_object()( ce2.cv()) ),
|
||||
ce1.cv(), ce1.ce());
|
||||
//need to return the opposite because the function recieved
|
||||
//need to return the opposite because the function received
|
||||
// the curve ends in a reverse order
|
||||
if (res != EQUAL)
|
||||
return (res == SMALLER) ? LARGER : SMALLER;
|
||||
|
|
|
|||
|
|
@ -1899,7 +1899,7 @@ public:
|
|||
return old;
|
||||
}
|
||||
|
||||
//This method occasionaly(!) checks the guarantees
|
||||
//This method occasionally(!) checks the guarantees
|
||||
// It is currently not in use, since the guarantees are constantly checked in O(1) time
|
||||
bool needs_update()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -878,7 +878,7 @@ public:
|
|||
// The left point of the current subcurve of one polycurve
|
||||
// coincides with the current subcurve of the other polycurve.
|
||||
if (left_overlap) {
|
||||
// An overlap occured at the previous iteration:
|
||||
// An overlap occurred at the previous iteration:
|
||||
// Output the overlapping polycurve.
|
||||
CGAL_assertion(ocv.number_of_subcurves() > 0);
|
||||
*oi++ = make_object(ocv);
|
||||
|
|
@ -887,7 +887,7 @@ public:
|
|||
else {
|
||||
// The left point of the current subcurve of one
|
||||
// polycurve coincides with the current subcurve of the
|
||||
// other polycurve, and no overlap occured at the
|
||||
// other polycurve, and no overlap occurred at the
|
||||
// previous iteration: Output the intersection
|
||||
// point. The derivative of at least one of the
|
||||
// polycurves is not defined at this point, so we give
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@ public:
|
|||
if (is_vertical(xcv1)) return (is_vertical(xcv2)) ? EQUAL : SMALLER;
|
||||
else if (is_vertical(xcv2)) return (LARGER);
|
||||
|
||||
// Perform the comparison based on the existance of bounded left
|
||||
// Perform the comparison based on the existence of bounded left
|
||||
// endpoints.
|
||||
if (has_left1 && has_left2) {
|
||||
// Obtain the left endpoints of xcv1 and xcv2.
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ void insert(Arrangement_on_surface_2<GeometryTraits_2, TopologyTraits>& arr,
|
|||
|
||||
/*! Insert a range of x-monotone curves into an empty arrangement
|
||||
* \param arr the resulting arrangement
|
||||
* \param begin the begining of the curve range
|
||||
* \param begin the beginning of the curve range
|
||||
* \param end past-the-end curve range
|
||||
*/
|
||||
template <typename GeometryTraits_2, typename TopologyTraits,
|
||||
|
|
@ -292,9 +292,9 @@ insert_empty(Arrangement_on_surface_2<GeometryTraits_2, TopologyTraits>& arr,
|
|||
/*! Insert a range of x-monotone curves and a range of isolated points into
|
||||
* an empty arrangement
|
||||
* \param arr the resulting arrangement
|
||||
* \param begin_xcurves the begining of the curve range
|
||||
* \param begin_xcurves the beginning of the curve range
|
||||
* \param end_xcurves past-the-end curve range
|
||||
* \param begin_points the begining of the point range
|
||||
* \param begin_points the beginning of the point range
|
||||
* \param end_points past-the-end point range
|
||||
*/
|
||||
template <typename GeometryTraits_2, typename TopologyTraits,
|
||||
|
|
@ -346,7 +346,7 @@ void insert_empty(Arrangement_on_surface_2<GeometryTraits_2, TopologyTraits>&
|
|||
|
||||
/*! Insert a range of x-monotone curves into a non-empty arrangement
|
||||
* \param arr the resulting arrangement
|
||||
* \param begin the begining of the curve range
|
||||
* \param begin the beginning of the curve range
|
||||
* \param end past-the-end curve range
|
||||
*/
|
||||
template <typename GeometryTraits_2, typename TopologyTraits,
|
||||
|
|
@ -837,7 +837,7 @@ insert_non_intersecting_curve
|
|||
|
||||
/*! Insert a range of x-monotone curves into an empty arrangement
|
||||
* \param arr the resulting arrangement
|
||||
* \param begin the begining of the curve range
|
||||
* \param begin the beginning of the curve range
|
||||
* \param end past-the-end curve range
|
||||
*/
|
||||
template <typename GeometryTraits_2, typename TopologyTraits,
|
||||
|
|
@ -886,7 +886,7 @@ void non_intersecting_insert_empty(Arrangement_on_surface_2<GeometryTraits_2,
|
|||
|
||||
/*! Insert a range of x-monotone curves into an empty arrangement
|
||||
* \param arr the resulting arrangement
|
||||
* \param begin the begining of the curve range
|
||||
* \param begin the beginning of the curve range
|
||||
* \param end past-the-end curve range
|
||||
*/
|
||||
template <typename GeometryTraits_2, typename TopologyTraits,
|
||||
|
|
@ -937,7 +937,7 @@ void non_intersecting_insert_empty(Arrangement_on_surface_2<GeometryTraits_2,
|
|||
|
||||
/*! Insert a range of x-monotone curves into a non-empty arrangement
|
||||
* \param arr the resulting arrangement
|
||||
* \param begin the begining of the curve range
|
||||
* \param begin the beginning of the curve range
|
||||
* \param end past-the-end curve range
|
||||
*/
|
||||
template <typename GeometryTraits_2, typename TopologyTraits,
|
||||
|
|
|
|||
|
|
@ -1791,7 +1791,7 @@ Arrangement_on_surface_2<GeomTraits, TopTraits>::
|
|||
remove_edge(Halfedge_handle e, bool remove_source, bool remove_target)
|
||||
{
|
||||
// Comment EBEB 2012-08-06: this has become a simple forwarding function
|
||||
// the intelligence of wether to swap he with he->opposite()
|
||||
// the intelligence of whether to swap he with he->opposite()
|
||||
// has been moved to _remove_edge itself, as additional computed
|
||||
// data is reused there
|
||||
|
||||
|
|
@ -2495,7 +2495,7 @@ _insert_at_vertices(DHalfedge* he_to,
|
|||
DInner_ccb* hole2 = (prev2->is_on_inner_ccb()) ? prev2->inner_ccb() : NULL;
|
||||
|
||||
if ((hole1 == hole2) && (hole1 != NULL)) {
|
||||
// .. only in this special case, we have to check wether swapping should
|
||||
// .. only in this special case, we have to check whether swapping should
|
||||
// take place
|
||||
|
||||
// EBEB 2012-07-26 the following code enables optimizations:
|
||||
|
|
@ -4245,7 +4245,7 @@ _remove_edge(DHalfedge* e, bool remove_source, bool remove_target)
|
|||
}
|
||||
else {
|
||||
// If f1 == f2 (same_face-case), then we consider two loops that occur when
|
||||
// he1 and he2 get removed; if f1 != f2, then he1 and he2 seperates the two
|
||||
// he1 and he2 get removed; if f1 != f2, then he1 and he2 separates the two
|
||||
// faces that will be merged upon their removal---here both he1 and he2
|
||||
// belong to a full cycle, and THAT IS WHY we give the f1 == f2 test to
|
||||
// determine whether end of loop should be he1->opposite() and
|
||||
|
|
@ -4753,7 +4753,7 @@ _remove_edge(DHalfedge* e, bool remove_source, bool remove_target)
|
|||
// As the outer CCB of f1 may be represented by any of the
|
||||
// halfedges in between he1 -> ... -> he2 (the halfedges in between
|
||||
// are on the new outer CCB we have just created), we represent the
|
||||
// former outer CCB by prev1, which definately stays on it.
|
||||
// former outer CCB by prev1, which definitely stays on it.
|
||||
oc1->set_halfedge(prev1);
|
||||
|
||||
// Notify the observers that a new outer CCB has been formed.
|
||||
|
|
|
|||
|
|
@ -511,7 +511,7 @@ public:
|
|||
};
|
||||
|
||||
|
||||
//! checks wether and how two arcs are intersection - with first filtering
|
||||
//! checks whether and how two arcs are intersection - with first filtering
|
||||
template < class CurvedKernelViaAnalysis_2, class FunctorBase >
|
||||
class Intersect_2 :
|
||||
public FunctorBase::Intersect_2 {
|
||||
|
|
|
|||
|
|
@ -1200,7 +1200,7 @@ Lexit:
|
|||
} // while(!s_stack.empty())
|
||||
|
||||
std::reverse(rev_points.begin(), rev_points.end());
|
||||
// resize rev_points to accomodate the size of points vector
|
||||
// resize rev_points to accommodate the size of points vector
|
||||
unsigned rsize = rev_points.size();
|
||||
rev_points.resize(rsize + points.size());
|
||||
std::copy(points.begin(), points.end(), rev_points.begin() + rsize);
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@ namespace CGAL {
|
|||
{
|
||||
formatter.read_face_begin();
|
||||
|
||||
// Allocate a new face and determine whether it is unbounded and wether it
|
||||
// Allocate a new face and determine whether it is unbounded and whether it
|
||||
// is valid (non-fictitious).
|
||||
DFace* new_f = m_arr_access.new_face();
|
||||
const bool is_unbounded = (formatter.read_vertex_index() != 0);
|
||||
|
|
|
|||
|
|
@ -514,7 +514,7 @@ public:
|
|||
}
|
||||
|
||||
/*!
|
||||
* Get the arrow drawing mode (this mode is relevent when drawing segments,
|
||||
* Get the arrow drawing mode (this mode is relevant when drawing segments,
|
||||
* polylines, circular arcs or splines).
|
||||
*/
|
||||
Fig_arrow_mode arrow_mode () const
|
||||
|
|
|
|||
|
|
@ -1751,7 +1751,7 @@ compile_and_run test_io
|
|||
|
||||
compile_and_run test_sgm
|
||||
|
||||
# if any error occured then append the full error description file to error file
|
||||
# if any error occurred then append the full error description file to error file
|
||||
|
||||
if [ -f $FULL_ERROR_DESCRIPTION_FILE ] ; then
|
||||
echo "******************** appending all error outputs ********************" >> $ERRORFILE
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ int main()
|
|||
}
|
||||
}
|
||||
|
||||
// If a failure has already occured, abort.
|
||||
// If a failure has already occurred, abort.
|
||||
if (result < 0) return result;
|
||||
|
||||
std::cout << std::endl;
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ int main()
|
|||
}
|
||||
}
|
||||
|
||||
// If a failure has already occured, abort.
|
||||
// If a failure has already occurred, abort.
|
||||
if (result < 0) return result;
|
||||
|
||||
std::cout << std::endl;
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ Each new face added in the selection is added exactly once in `out`.
|
|||
\param fg the graph containing the selected faces.
|
||||
\param k the number of times the expansion procedure is iteratively applied.
|
||||
\param is_selected indicates if a face is part of the selection. It is updated by the function
|
||||
to accomodate new faces added to the selection.
|
||||
to accommodate new faces added to the selection.
|
||||
\param out new faces added to the selection are added exactly once in `out`.
|
||||
*/
|
||||
template <class FaceRange, class FaceGraph, class IsFaceSelectedPMap, class OutputIterator>
|
||||
|
|
@ -154,7 +154,7 @@ Each face removed from the selection is added exactly once in `out`.
|
|||
\param fg the graph containing the selected faces.
|
||||
\param k the number of times the reduction procedure is iteratively applied.
|
||||
\param is_selected indicates if a face is part of the selection. It is updated by the function
|
||||
to accomodate faces removed from the selection.
|
||||
to accommodate faces removed from the selection.
|
||||
\param out faces removed from the selection are added exactly once in `out`.
|
||||
*/
|
||||
template <class FaceRange, class FaceGraph, class IsFaceSelectedPMap, class OutputIterator>
|
||||
|
|
@ -271,7 +271,7 @@ Each new edge added in the selection is added exactly once in `out`.
|
|||
\param fg the graph containing the selected edges.
|
||||
\param k the number of times the expansion procedure is iteratively applied.
|
||||
\param is_selected indicates if an edge is part of the selection. It is updated by the function
|
||||
to accomodate new edges added to the selection.
|
||||
to accommodate new edges added to the selection.
|
||||
\param out new edges added to the selection are added exactly once in `out`.
|
||||
*/
|
||||
template <class EdgeRange, class HalfedgeGraph, class IsEdgeSelectedPMap, class OutputIterator>
|
||||
|
|
@ -337,7 +337,7 @@ Each edge removed from the selection is added exactly once in `out`.
|
|||
\param fg the graph containing the selected edges.
|
||||
\param k the number of times the reduction procedure is iteratively applied.
|
||||
\param is_selected indicates if an edge is part of the selection. It is updated by the function
|
||||
to accomodate edges removed from the selection.
|
||||
to accommodate edges removed from the selection.
|
||||
\param out edges removed from the selection are added exactly once in `out`.
|
||||
*/
|
||||
template <class EdgeRange, class HalfedgeGraph, class IsEdgeSelectedPMap, class OutputIterator>
|
||||
|
|
@ -424,7 +424,7 @@ Each new vertex added in the selection is added exactly once in `out`.
|
|||
\param fg the graph containing the selected vertices.
|
||||
\param k the number of times the expansion procedure is iteratively applied.
|
||||
\param is_selected indicates if a vertex is part of the selection. It is updated by the function
|
||||
to accomodate new vertices added to the selection.
|
||||
to accommodate new vertices added to the selection.
|
||||
\param out new vertices added to the selection are added exactly once in `out`.
|
||||
*/
|
||||
template <class VertexRange, class HalfedgeGraph, class IsVertexSelectedPMap, class OutputIterator>
|
||||
|
|
@ -478,7 +478,7 @@ Each vertex removed from the selection is added exactly once in `out`.
|
|||
\param fg the graph containing the selected vertices.
|
||||
\param k the number of times the reduction procedure is iteratively applied.
|
||||
\param is_selected indicates if a vertex is part of the selection. It is updated by the function
|
||||
to accomodate vertices removed from the selection.
|
||||
to accommodate vertices removed from the selection.
|
||||
\param out vertices removed from the selection are added exactly once in `out`.
|
||||
*/
|
||||
template <class VertexRange, class HalfedgeGraph, class IsVertexSelectedPMap, class OutputIterator>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ namespace CGAL {
|
|||
|
||||
\section gbc_introduction Introduction
|
||||
|
||||
The package <em>2D Generalized Barycentric Coordinates</em> offers an efficient and robust implementation of two-dimensional closed-form generalized barycentric coordinates defined for simple two-dimensional polygons. If coordinates with respect to multivariate scattered points instead of a polygon are required, please refer to natural neighbour coordinates from the package \ref PkgInterpolation2 "2D and Surface Function Interpolation".
|
||||
The package <em>2D Generalized Barycentric Coordinates</em> offers an efficient and robust implementation of two-dimensional closed-form generalized barycentric coordinates defined for simple two-dimensional polygons. If coordinates with respect to multivariate scattered points instead of a polygon are required, please refer to natural neighbor coordinates from the package \ref PkgInterpolation2 "2D and Surface Function Interpolation".
|
||||
|
||||
In particular, the package includes an implementation of \ref wp_example "Wachspress", \ref mv_example "mean value", and \ref dh_example "discrete harmonic" coordinates and provides some extra functions to compute barycentric coordinates with respect to segments (\ref seg_example "segment coordinates") and triangles (\ref tri_example "triangle coordinates"). The section \ref gbc_theory gives a short introduction to the topic of barycentric coordinates.
|
||||
|
||||
|
|
@ -33,7 +33,7 @@ The output of the computation is a set of coordinate values at the current query
|
|||
\section gbc_examples Examples
|
||||
|
||||
\subsection seg_example Segment Coordinates
|
||||
This is a simple example to show the use of the global function \ref seg_coord_global "CGAL::Barycentric_coordinates::compute_segment_coordinates_2()". We compute coordinates at three green points along the segment \f$[v_0, v_1]\f$ and at two blue points outside this segment but along its supporting line. We use the exact kernel and return coordinates as an array of two values. Again, the symmetry of the query points helps us to recognize errors that may have occured during the computation.
|
||||
This is a simple example to show the use of the global function \ref seg_coord_global "CGAL::Barycentric_coordinates::compute_segment_coordinates_2()". We compute coordinates at three green points along the segment \f$[v_0, v_1]\f$ and at two blue points outside this segment but along its supporting line. We use the exact kernel and return coordinates as an array of two values. Again, the symmetry of the query points helps us to recognize errors that may have occurred during the computation.
|
||||
|
||||
\anchor seg_coord_example
|
||||
\cgalFigureBegin{seg__example,segment_coordinates_example.png}
|
||||
|
|
@ -79,7 +79,7 @@ Example's point pattern.
|
|||
|
||||
\subsection height_inter_example Height Interpolation for Terrain Modeling
|
||||
|
||||
This is an advanced example that shows how to use generalized barycentric coordinates for height interpolation with applications to terrain modelling. It also shows how to use a non-default traits class with our package instead of a `Kernel` traits class. Suppose we know the boundary of three-dimensional piece of terrain that can be represented as a polygon with several three-dimensional vertices, where the third dimension gives the corresponding height. The task is to propagate the height from the known sample points on the boundary to the polygon's interior. This gives an approximate estimation of the terrain's surface in this region.
|
||||
This is an advanced example that shows how to use generalized barycentric coordinates for height interpolation with applications to terrain modeling. It also shows how to use a non-default traits class with our package instead of a `Kernel` traits class. Suppose we know the boundary of three-dimensional piece of terrain that can be represented as a polygon with several three-dimensional vertices, where the third dimension gives the corresponding height. The task is to propagate the height from the known sample points on the boundary to the polygon's interior. This gives an approximate estimation of the terrain's surface in this region.
|
||||
|
||||
\cgalFigureBegin{terrain__example,terrain.png}
|
||||
A 2D polygon with 50 vertices representing a piece of terrain with convex and concave parts. The height is not shown.
|
||||
|
|
@ -92,7 +92,7 @@ In this example we project a three-dimensional polygon orthogonally onto the two
|
|||
As a result we get a smooth function inside the polygon that approximates the underlying terrain's surface.
|
||||
|
||||
\cgalFigureBegin{terrain__inter__example,terrain_interpolated.png}
|
||||
The interpolated data. The colour bar represents the corresponding height.
|
||||
The interpolated data. The color bar represents the corresponding height.
|
||||
\cgalFigureEnd
|
||||
|
||||
\section gbc_degeneracies Degeneracies and Special Cases
|
||||
|
|
@ -201,7 +201,7 @@ are also normalized. Note that they are unstable if a query point is closer than
|
|||
|
||||
\section gbc_performance Performance
|
||||
|
||||
Apart from the most important requirement on barycentric coordinates to be as precise as possible, it is very important for them to be as fast as possible to evaluate. These coordinates are used in many applications where they must be computed for millions of points and, thus, the real time usage of coordinates is crucial. When writing the code, we tried to fulfil this important requirement, and in this section we present a few results about the computation times of the implemented coordinates.
|
||||
Apart from the most important requirement on barycentric coordinates to be as precise as possible, it is very important for them to be as fast as possible to evaluate. These coordinates are used in many applications where they must be computed for millions of points and, thus, the real time usage of coordinates is crucial. When writing the code, we tried to fulfill this important requirement, and in this section we present a few results about the computation times of the implemented coordinates.
|
||||
|
||||
The structure of the speed test that we ran for all functions consists of computing coordinate values (or weights) at >= 1 million strictly interior points with respect to some polygon (or triangle, or segment). At each iteration of the loop we create a query point, pass it to the function, and compute all the related coordinates. We run this loop 10 times in a row, and the time presented in the log-log scale plot at the end of the section is the arithmetic mean of all trials.
|
||||
|
||||
|
|
@ -244,16 +244,16 @@ Segment coordinates (blue) for all the segment points (green) with respect to th
|
|||
If we want to plot triangle coordinates, we follow a similar approach. We take \ref fig__tri__example "a triangle" \f$[v_0, v_1, v_2]\f$ in the plane and sample its interior and boundary with a number of points. Once we have this sampling, we plot one of the triangle coordinate functions (here with respect to the third vertex of the triangle) at all the defined sample points. Likewise, we can plot the coordinate function with respect to the first or second vertex. The resulting function is linear (shown in the figure below) that grows from zero along the first edge \f$[v_0, v_1]\f$ to one at the chosen vertex \f$v_2\f$.
|
||||
|
||||
\cgalFigureBegin{tri__coord__interp,tri__coord__interp.png}
|
||||
Triangle coordinates with respect to \f$v_2 = (1.0,\ 2.0)\f$. The colour bar indicates the range of values for the chosen coordinate.
|
||||
Triangle coordinates with respect to \f$v_2 = (1.0,\ 2.0)\f$. The color bar indicates the range of values for the chosen coordinate.
|
||||
\cgalFigureEnd
|
||||
|
||||
Since many applications require to work with more complex planar geometric shapes than segments and triangles, it seems natural to investigate a generalized version of triangle coordinates with respect to arbitrary polygons. The first attempt was taken in 1975 by E. L. Wachspress \cite cgal:bc:w-rfeb-75, and the resulting generalized barycentric coordinates are now called Wachspress coordinates \cite cgal:bc:mlbd-gbcip-02. \ref gbc_deg_wachspress_coordinates "These coordinates" are well-defined for arbitrary <em>strictly convex polygons</em> and have all the properties of triangle coordinates \cite cgal:bc:fhk-gcbcocp-06. Unfortunately, they are not well-defined for weakly convex and concave polygons.
|
||||
|
||||
Analogously to the previous cases, we want to plot the Wachspress coordinates and see how they look like. Let us choose a \ref wp_polygon "non-regular hexagon", slightly rotate it, and move one of its vertices towards the line through its two adjacent neighbours. We sample the interior and the boundary of this polygon as before and plot the coordinate function with respect to the vertex that we moved at all the sample points. We see that we get a smooth function, which is linear along all edges and grows from zero to one, as the colour bar indicates.
|
||||
Analogously to the previous cases, we want to plot the Wachspress coordinates and see how they look like. Let us choose a \ref wp_polygon "non-regular hexagon", slightly rotate it, and move one of its vertices towards the line through its two adjacent neighbors. We sample the interior and the boundary of this polygon as before and plot the coordinate function with respect to the vertex that we moved at all the sample points. We see that we get a smooth function, which is linear along all edges and grows from zero to one, as the color bar indicates.
|
||||
|
||||
\anchor wp_plot
|
||||
\cgalFigureBegin{wp__coord__interp,wp__coord__interp.png}
|
||||
The Wachspress coordinate function with respect to the indicated vertex with values from zero to one as the colour bar indicates.
|
||||
The Wachspress coordinate function with respect to the indicated vertex with values from zero to one as the color bar indicates.
|
||||
\cgalFigureEnd
|
||||
|
||||
Another type of generalized barycentric coordinates goes back to Pinkall and Polthier in 1993 \cite cgal:pp-cdmsc-93 and Eck et al. in 1995 \cite cgal:bc:eddhls-maam-95 in the context of \ref PkgSurfaceMeshParameterization "triangle mesh parameterization". They are called discrete harmonic coordinates. \ref gbc_deg_discrete_harmonic_coordinates "These coordinates" are well-defined, similarly to Wachspress coordinates, for arbitrary <em>strictly convex polygons</em> and inherit all the properties of triangle coordinates <em>apart from the positivity inside a polygon</em> because they can take on negative values \ref gbc_deg_discrete_harmonic_coordinates "for some polygons". Another interesting property of these coordinate functions is that they coincide with Wachspress coordinates for any polygon whose vertices lie on a common circle.
|
||||
|
|
@ -262,15 +262,15 @@ To plot discrete harmonic coordinates we take \ref wp_plot "the same polygon" as
|
|||
|
||||
\anchor dh_plot
|
||||
\cgalFigureBegin{dh__coord__interp,dh__coord__interp.png}
|
||||
The discrete harmonic coordinate function with respect to the indicated vertex with values from zero to one as the colour bar indicates.
|
||||
The discrete harmonic coordinate function with respect to the indicated vertex with values from zero to one as the color bar indicates.
|
||||
\cgalFigureEnd
|
||||
|
||||
The last type of generalized barycentric coordinates that we discuss are mean value coordinates \cite cgal:f-mvc-03 proposed by M. Floater in 2003. Based on the <a href="https://en.wikipedia.org/wiki/Mean_value_theorem">mean value theorem</a>, \ref gbc_deg_mean_value_coordinates "these coordinates", unlike Wachspress and discrete harmonic coordinates, are well-defined for arbitrary <em>simple polygons</em>, inherit all the properties of triangle coordinates for any convex polygon, and <em>lack only the positivity property for general concave polygons</em>. Hormann and Floater prove in \cite cgal:bc:hf-mvcapp-06 that these coordinates are positive inside the kernel of a <a href="https://en.wikipedia.org/wiki/Star-shaped_polygon">star-shaped polygon</a>. They are also positive in the closure of any quadrilateral. Like discrete harmonic weights, mean value weights are often used in the context of \ref PkgSurfaceMeshParameterization "triangle mesh parameterization."
|
||||
|
||||
In order to show the particular behaviour of mean value coordinates with an application to concave polygons, we take \ref fig__mv__example "a star-shaped polygon" with ten vertices \f$[v_0, \dots, v_9]\f$, sample its interior and boundary, and plot the coordinate function with respect to the fourth vertex \f$v_3\f$. As the colour bar indicates, the obtained function grows from a slightly negative value to one at the chosen vertex. It is also smooth inside the polygon and linear along all edges.
|
||||
In order to show the particular behaviour of mean value coordinates with an application to concave polygons, we take \ref fig__mv__example "a star-shaped polygon" with ten vertices \f$[v_0, \dots, v_9]\f$, sample its interior and boundary, and plot the coordinate function with respect to the fourth vertex \f$v_3\f$. As the color bar indicates, the obtained function grows from a slightly negative value to one at the chosen vertex. It is also smooth inside the polygon and linear along all edges.
|
||||
|
||||
\cgalFigureBegin{mv__coord__interp,mv__coord__interp.png}
|
||||
Mean value coordinates with respect to \f$v_3\f$. The colour bar indicates the range of values for the chosen coordinate function.
|
||||
Mean value coordinates with respect to \f$v_3\f$. The color bar indicates the range of values for the chosen coordinate function.
|
||||
\cgalFigureEnd
|
||||
|
||||
<b>Interesting fact</b>: all the coordinates discussed in this section and implemented in the package come from one and the same family of generalized barycentric coordinates named <em>3-point family of coordinates</em> \cite cgal:bc:fhk-gcbcocp-06.
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@
|
|||
Close the current window</FONT></STRONG></P>
|
||||
Press Ctrl+X combination keys or go to File menu and choose "Close". You
|
||||
may do it for any window other than the initial one, this operation will
|
||||
close only the one you have choosen. If you do this for the initial parent
|
||||
close only the one you have chosen. If you do this for the initial parent
|
||||
window, it will close the others too.
|
||||
|
||||
<P align="left"><STRONG><FONT color="#3300cc" size="4">
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ public:
|
|||
|
||||
Edge_iterator itr = arr->edges_begin();
|
||||
for(; itr != arr->edges_end(); ++itr) {
|
||||
// take only relevant edges (which seperate between contained and
|
||||
// take only relevant edges (which separate between contained and
|
||||
// non-contained faces.
|
||||
Halfedge_iterator he = itr;
|
||||
if(he->face()->contained() == he->twin()->face()->contained())
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
\file Gps_on_surface_base_2.h
|
||||
\brief A class that allows Boolean set operations.
|
||||
This class is the base class for General_polygon_set_on_surface_2 and
|
||||
recieves extra template parameter which allows different validation
|
||||
receives extra template parameter which allows different validation
|
||||
policies. If you do not want validation then use the default validation
|
||||
policy. A different validation policy example can be found in
|
||||
General_polygon_set_on_surface_2.
|
||||
|
|
@ -75,7 +75,7 @@ namespace Boolean_set_operation_2_internal
|
|||
|
||||
//! General_polygon_set_on_surface_2
|
||||
/*! This class is the base class for General_polygon_set_on_surface_2 and
|
||||
recieves extra template parameter which allows different validation
|
||||
receives extra template parameter which allows different validation
|
||||
policies. If you do not want validation then use the default validation
|
||||
policy. A different validation policy example can be found in
|
||||
General_polygon_set_on_surface_2.
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ allows to increase it easily.
|
|||
|
||||
Bounding volumes also define geometric "center points" of objects.
|
||||
For example, if two objects are to be matched (approximately), one
|
||||
approch is to first apply the translation that maps the centers of
|
||||
approach is to first apply the translation that maps the centers of
|
||||
their smallest enclosing spheres onto each other. Simpler centers are
|
||||
possible, of course (center of gravity, center of bounding box), but
|
||||
more advanced bounding volumes might give better results in some
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ namespace CGAL {
|
|||
// Since the transformations we apply do not change the solution
|
||||
// space of the intermediate systems, we can say: The system t x =
|
||||
// e_j has, for any i in {1,...,d}, the same solution space as I x
|
||||
// = n_i (with n_i being the i-th colum of N); it follows that
|
||||
// = n_i (with n_i being the i-th column of N); it follows that
|
||||
// x=n_i.
|
||||
|
||||
// store the identity matrix in mi:
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ void read_base_number(std::istream& in, BigInt& m, long length, long maxBits) {
|
|||
core_io_error_handler("CoreIO::read_from_file()","bad big number format.");
|
||||
delete[] buffer;
|
||||
|
||||
// shift left if neccessary
|
||||
// shift left if necessary
|
||||
if (offset > 0 && base != 10) {
|
||||
m <<= offset;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -944,7 +944,7 @@ std::cout << "In newtonRefine, input J=" << J.first
|
|||
// Newton might bring x very close to one endpoint, but it can be
|
||||
// because the root is near there! In any case,
|
||||
// by setting x to the center of J, you only gain at most
|
||||
// one bit of accuracy, but you stand to loose an
|
||||
// one bit of accuracy, but you stand to lose an
|
||||
// arbitrary amount of bits of accuracy if you are unlucky!
|
||||
// So I will comment out the next line. --Chee (Aug 9, 2004).
|
||||
//
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ circumcenter_translateC2(const FT &dqx, const FT &dqy,
|
|||
CGAL_kernel_assertion ( ! CGAL_NTS is_zero(den) );
|
||||
|
||||
// One possible optimization here is to precompute 1/den, to avoid one
|
||||
// division. However, we loose precision, and it's maybe not worth it (?).
|
||||
// division. However, we lose precision, and it's maybe not worth it (?).
|
||||
dcx = determinant (dry, dqy, r2, q2) / den;
|
||||
dcy = - determinant (drx, dqx, r2, q2) / den;
|
||||
}
|
||||
|
|
@ -440,7 +440,7 @@ weighted_circumcenter_translateC2(const RT &dqx, const RT &dqy, const RT &dqw,
|
|||
CGAL_assertion ( den != RT(0) );
|
||||
|
||||
// One possible optimization here is to precompute 1/den, to avoid one
|
||||
// division. However, we loose precision, and it's maybe not worth it (?).
|
||||
// division. However, we lose precision, and it's maybe not worth it (?).
|
||||
dcx = determinant (dry, dqy, r2, q2) / den;
|
||||
dcy = - determinant (drx, dqx, r2, q2) / den;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ class Bench
|
|||
|
||||
texout << " & " <<utime.tv_sec<<"."<<utime.tv_usec;
|
||||
|
||||
//It's necessery to make output of number of filter fails here!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
//It's necessary to make output of number of filter fails here!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
std::cout << " vertices : " << vertices << std::endl
|
||||
<< " halfedges : " << hedges << std::endl
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ class Bench
|
|||
texout << " & " <<utime.tv_sec<<"."<< std::setw(6) << std::setfill('0')
|
||||
<< utime.tv_usec;
|
||||
|
||||
//It's necessery to make output of number of filter fails here!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
//It's necessary to make output of number of filter fails here!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
std::cout << " vertices : " << vertices << std::endl
|
||||
<< " halfedges : " << hedges << std::endl
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public:
|
|||
protected:
|
||||
// error handling
|
||||
int m_mode; // Error_mode or'ed together
|
||||
bool m_error; // flags if an error has occured
|
||||
bool m_error; // flags if an error has occurred
|
||||
std::string m_error_message; // error message kept from last error
|
||||
virtual void error_handler( std::string s);
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ int main() {
|
|||
|
||||
std::cout << "The approximate probability that 3 spheres with radius 1"
|
||||
<< std::endl;
|
||||
std::cout << "choosen (uniformly) randomly on a 5x5x5 box intersect is: "
|
||||
std::cout << "chosen (uniformly) randomly on a 5x5x5 box intersect is: "
|
||||
<< ((double)count)/((double)(10000)) << std::endl;
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ private:
|
|||
|
||||
// Functor allowing to transform a variable into its address.
|
||||
template<typename T>
|
||||
struct Take_adress : public CGAL::cpp98::unary_function<T, T*>
|
||||
struct Take_address : public CGAL::cpp98::unary_function<T, T*>
|
||||
{
|
||||
T* operator() (T& t) const
|
||||
{ return &t; }
|
||||
|
|
@ -97,14 +97,14 @@ int main()
|
|||
std::vector<CMap_3::Dart*> toremove;
|
||||
|
||||
// Copy in vector toremove one dart per face
|
||||
std::copy(boost::transform_iterator<Take_adress<CMap_3::Dart>,
|
||||
std::copy(boost::transform_iterator<Take_address<CMap_3::Dart>,
|
||||
CMap_3::One_dart_per_cell_range<2>::iterator>
|
||||
(cmap.one_dart_per_cell<2>().begin(),
|
||||
Take_adress<CMap_3::Dart>()),
|
||||
boost::transform_iterator<Take_adress<CMap_3::Dart>,
|
||||
Take_address<CMap_3::Dart>()),
|
||||
boost::transform_iterator<Take_address<CMap_3::Dart>,
|
||||
CMap_3::One_dart_per_cell_range<2>::iterator>
|
||||
(cmap.one_dart_per_cell<2>().end(),
|
||||
Take_adress<CMap_3::Dart>()),
|
||||
Take_address<CMap_3::Dart>()),
|
||||
back_inserter(toremove));
|
||||
|
||||
// Remove each face sequentially.
|
||||
|
|
|
|||
|
|
@ -4194,7 +4194,7 @@ namespace CGAL {
|
|||
|
||||
/** Test if a 2-cell can be inserted onto a given 3-cell along
|
||||
* a path of edges.
|
||||
* @param afirst iterator on the begining of the path.
|
||||
* @param afirst iterator on the beginning of the path.
|
||||
* @param alast iterator on the end of the path.
|
||||
* @return true iff a 2-cell can be inserted along the path.
|
||||
*/
|
||||
|
|
@ -4239,7 +4239,7 @@ namespace CGAL {
|
|||
}
|
||||
|
||||
/** Insert a 2-cell in a given 3-cell along a path of darts.
|
||||
* @param afirst iterator on the begining of the path.
|
||||
* @param afirst iterator on the beginning of the path.
|
||||
* @param alast iterator on the end of the path.
|
||||
* @param update_attributes a boolean to update the enabled attributes
|
||||
* @return a dart of the new 2-cell.
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ insert_cell_1_in_cell_2(CMap& amap,
|
|||
/** Test if a 2-cell can be inserted onto a given 3-cell along
|
||||
* a path of edges.
|
||||
* @param amap the used combinatorial map.
|
||||
* @param afirst iterator on the begining of the path.
|
||||
* @param afirst iterator on the beginning of the path.
|
||||
* @param alast iterator on the end of the path.
|
||||
* @return true iff a 2-cell can be inserted along the path.
|
||||
*/
|
||||
|
|
@ -134,7 +134,7 @@ CGAL_DEPRECATED bool is_insertable_cell_2_in_cell_3
|
|||
|
||||
/** Insert a 2-cell in a given 3-cell along a path of darts.
|
||||
* @param amap the used combinatorial map.
|
||||
* @param afirst iterator on the begining of the path.
|
||||
* @param afirst iterator on the beginning of the path.
|
||||
* @param alast iterator on the end of the path.
|
||||
* @param update_attributes a boolean to update the enabled attributes
|
||||
* (deprecated, now we use are_attributes_automatically_managed())
|
||||
|
|
|
|||
|
|
@ -1645,7 +1645,7 @@ cell neighborhood in $O(m)$ time."
|
|||
, succeeds = "aaas-lpmpc-97"
|
||||
, precedes = "aas-lpocp-98"
|
||||
, update = "01.04 icking, 98.11 bibrelex, 98.03 agarwal"
|
||||
, annote = "Corrects and supercedes parts of \cite{aaas-lpmpc-97}"
|
||||
, annote = "Corrects and supersedes parts of \cite{aaas-lpmpc-97}"
|
||||
}
|
||||
|
||||
@article{aas-mpcpp-99
|
||||
|
|
|
|||
|
|
@ -830,7 +830,7 @@ _merge_two_intervals(Edge_const_handle e1, bool is_leftmost1,
|
|||
Vertex_handle new_v = _append_vertex(out_d, p_right, e1);
|
||||
new_v->left()->add_curves(e2->curves_begin(), e2->curves_end());
|
||||
|
||||
// We are not at v becuase p_right is smaller than v.
|
||||
// We are not at v because p_right is smaller than v.
|
||||
// The special case that we are at v is handled in the next
|
||||
// condition.
|
||||
// If we were at v, then this was a special case that is handled
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ bool read_segments (const char* filename,
|
|||
/*!
|
||||
* Check if a $x$-monotone curve with the same associated data as the input
|
||||
* curve is in the given range.
|
||||
* \param begin The begining of the range.
|
||||
* \param begin The beginning of the range.
|
||||
* \param end Passed-the-end iterator.
|
||||
* \param c The curve, the data of which we are searching.
|
||||
* \return True if we found an $x$-monotone curve with the same data.
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ printing the diagrams, we just output the labels of the triangles:
|
|||
|
||||
The next example demonstrates how to instantiate and use the
|
||||
envelope-traits class for spheres, based on the
|
||||
`Arr_conic_traits_2` class that handles the projected intersecion
|
||||
`Arr_conic_traits_2` class that handles the projected intersection
|
||||
curves. The program reads a set of spheres from an input file and
|
||||
constructs their lower envelope:
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
// - remove edges between faces with the same envelope data, which do not
|
||||
// contribute to the shape of the envelope (i.e. have the same envelope data
|
||||
// as their adjacent faces)
|
||||
// - remove unneccessary vertices of two kinds:
|
||||
// - remove unnecessary vertices of two kinds:
|
||||
// a. vertices which have degree 2, the 2 incident edges can be geometrically
|
||||
// merged, and has the same envelope data as both these edges
|
||||
// b. isolated vertices which have the same envelope data as their incident
|
||||
|
|
@ -641,16 +641,16 @@ public:
|
|||
// make sure the aux flags are correctly after all resolvings
|
||||
//CGAL_assertion(verify_aux_flags(result));
|
||||
|
||||
// finally, remove unneccessary edges, between faces with the same surface
|
||||
// finally, remove unnecessary edges, between faces with the same surface
|
||||
// (and which are not degenerate)
|
||||
|
||||
remove_unneccessary_edges(result);
|
||||
remove_unnecessary_edges(result);
|
||||
CGAL_expensive_assertion_msg(result.is_valid(),
|
||||
"after remove edges result is not valid");
|
||||
|
||||
// also remove unneccessary vertices (that were created in the process of
|
||||
// also remove unnecessary vertices (that were created in the process of
|
||||
// vertical decomposition but the vertical edge was removed)
|
||||
remove_unneccessary_vertices(result);
|
||||
remove_unnecessary_vertices(result);
|
||||
CGAL_expensive_assertion_msg(result.is_valid(),
|
||||
"after remove vertices result is not valid");
|
||||
|
||||
|
|
@ -728,9 +728,9 @@ protected:
|
|||
return has_eq;
|
||||
}
|
||||
|
||||
// Remove unneccessary edges, between faces with the same surface
|
||||
// Remove unnecessary edges, between faces with the same surface
|
||||
// (and which are not degenerate)
|
||||
void remove_unneccessary_edges(Minimization_diagram_2& result)
|
||||
void remove_unnecessary_edges(Minimization_diagram_2& result)
|
||||
{
|
||||
// collect all those edges in this list, and remove them all at the end
|
||||
// (thus, not destroying the iterator)
|
||||
|
|
@ -1009,18 +1009,18 @@ protected:
|
|||
return (equal_first && equal_second);
|
||||
}
|
||||
|
||||
// Remove unneccessary vertices, which have degree 2, and the 2 curves
|
||||
// Remove unnecessary vertices, which have degree 2, and the 2 curves
|
||||
// can be merged
|
||||
// (and which are not degenerate)
|
||||
void remove_unneccessary_vertices(Minimization_diagram_2& result)
|
||||
void remove_unnecessary_vertices(Minimization_diagram_2& result)
|
||||
{
|
||||
// we have 2 types of unneccessary vertices: those with degree 2 (that
|
||||
// we have 2 types of unnecessary vertices: those with degree 2 (that
|
||||
// satisfy all the conditions below), and isolated vertices that have the
|
||||
// same envelope information as the face they're contained in.
|
||||
|
||||
// all the vertices that don't have their data set, are those vertices
|
||||
// on vertical edges, created in the decomposition process,
|
||||
// and are not neccessary
|
||||
// and are not necessary
|
||||
|
||||
// also those vertices with degree 2, that can merge their 2 edges and
|
||||
// with same data as both these edges, can be removed
|
||||
|
|
|
|||
|
|
@ -654,7 +654,7 @@ public:
|
|||
// remember the envelope decision over the first & last parts, to
|
||||
// be able to copy it to the original endpoints
|
||||
// TODO: the initial value is only needed to shut up the compiler
|
||||
// TODO: is this realy needed, or we can use the decision made on "edge"
|
||||
// TODO: is this really needed, or we can use the decision made on "edge"
|
||||
// (is "edge" always the first part? )
|
||||
Comparison_result first_part_res = EQUAL;
|
||||
|
||||
|
|
|
|||
|
|
@ -3322,7 +3322,7 @@ namespace CGAL {
|
|||
|
||||
/** Test if a 2-cell can be inserted onto a given 3-cell along
|
||||
* a path of edges.
|
||||
* @param afirst iterator on the begining of the path.
|
||||
* @param afirst iterator on the beginning of the path.
|
||||
* @param alast iterator on the end of the path.
|
||||
* @return true iff a 2-cell can be inserted along the path.
|
||||
* the path is a sequence of dartd, one per edge
|
||||
|
|
@ -3365,7 +3365,7 @@ namespace CGAL {
|
|||
|
||||
/** Insert a 2-cell in a given 3-cell along a path of darts.
|
||||
* @param amap the used generalized map.
|
||||
* @param afirst iterator on the begining of the path.
|
||||
* @param afirst iterator on the beginning of the path.
|
||||
* @param alast iterator on the end of the path.
|
||||
* the path is a sequence of darts, one per edge
|
||||
* where the face will be inserted.
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ template < class P, class Creator >
|
|||
void
|
||||
Random_points_in_sphere_3<P,Creator>::
|
||||
generate_point() {
|
||||
// A strip between z and z+dz has an area independant of z
|
||||
// A strip between z and z+dz has an area independent of z
|
||||
typedef typename Creator::argument_type T;
|
||||
double alpha = this->_rnd.get_double() * 2.0 * CGAL_PI;
|
||||
double z = 2 * this->_rnd.get_double() - 1.0;
|
||||
|
|
@ -104,7 +104,7 @@ template < class P, class Creator >
|
|||
void
|
||||
Random_points_on_sphere_3<P,Creator>::
|
||||
generate_point() {
|
||||
// A strip between z and z+dz has an area independant of z
|
||||
// A strip between z and z+dz has an area independent of z
|
||||
typedef typename Creator::argument_type T;
|
||||
double alpha = this->_rnd.get_double() * 2.0 * CGAL_PI;
|
||||
double z = 2 * this->_rnd.get_double() - 1.0;
|
||||
|
|
|
|||
|
|
@ -302,7 +302,7 @@ namespace Qt {
|
|||
v->centerOn(new_center);
|
||||
|
||||
// QGraphicsView::centerOn makes rounding errors.
|
||||
// The following two "if" make them unnoticable when dx==0 or dy==0.
|
||||
// The following two "if" make them unnoticeable when dx==0 or dy==0.
|
||||
if(dx == 0) {
|
||||
v->horizontalScrollBar()->setValue(horizontalScrollBarValue);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -230,7 +230,7 @@ public:
|
|||
|
||||
The near (resp. far) clipping plane is positioned at a distance equal to
|
||||
zClippingCoefficient() * sceneRadius() in front of (resp. behind) the
|
||||
sceneCenter(). This garantees an optimal use of the z-buffer range and
|
||||
sceneCenter(). This guarantees an optimal use of the z-buffer range and
|
||||
minimizes aliasing. See the zNear() and zFar() documentations.
|
||||
|
||||
Default value is square root of 3.0 (so that a cube of size sceneRadius() is
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ Camera &Camera::operator=(const Camera &camera) {
|
|||
|
||||
You should not call this method when the Camera is associated with a CGAL::QGLViewer,
|
||||
since the latter automatically updates these values when it is resized (hence
|
||||
overwritting your values).
|
||||
overwriting your values).
|
||||
|
||||
Non-positive dimension are silently replaced by a 1 pixel value to ensure
|
||||
frustrum coherence.
|
||||
|
|
@ -260,7 +260,7 @@ void Camera::setFieldOfView(qreal fov) {
|
|||
/*! Defines the Camera type().
|
||||
|
||||
Changing the camera Type alters the viewport and the objects' sizes can be
|
||||
changed. This method garantees that the two frustum match in a plane normal to
|
||||
changed. This method guarantees that the two frustum match in a plane normal to
|
||||
viewDirection(), passing through the pivotPoint().
|
||||
|
||||
Prefix the type with \c Camera if needed, as in:
|
||||
|
|
|
|||
|
|
@ -646,7 +646,7 @@ public:
|
|||
// number of border halfedges. An edge with no incident face
|
||||
// counts as two border halfedges. Precondition: `normalize_border()'
|
||||
// has been called and no halfedge insertion or removal and no
|
||||
// change in border status of the halfedges have occured since
|
||||
// change in border status of the halfedges have occurred since
|
||||
// then.
|
||||
|
||||
size_type size_of_border_edges() const { return nb_border_edges;}
|
||||
|
|
@ -655,7 +655,7 @@ public:
|
|||
// face on one side and to a hole on the other side.
|
||||
// Precondition: `normalize_border()' has been called and no
|
||||
// halfedge insertion or removal and no change in border status of
|
||||
// the halfedges have occured since then.
|
||||
// the halfedges have occurred since then.
|
||||
|
||||
Halfedge_iterator border_halfedges_begin() {
|
||||
// halfedge iterator starting with the border edges. The range [
|
||||
|
|
@ -664,7 +664,7 @@ public:
|
|||
// halfedges_end()') denotes all border edges. Precondition:
|
||||
// `normalize_border()' has been called and no halfedge insertion
|
||||
// or removal and no change in border status of the halfedges have
|
||||
// occured since then.
|
||||
// occurred since then.
|
||||
return border_halfedges;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -490,7 +490,7 @@ public:
|
|||
// number of border halfedges. An edge with no incident face
|
||||
// counts as two border halfedges. Precondition: `normalize_border()'
|
||||
// has been called and no halfedge insertion or removal and no
|
||||
// change in border status of the halfedges have occured since
|
||||
// change in border status of the halfedges have occurred since
|
||||
// then.
|
||||
|
||||
size_type size_of_border_edges() const { return nb_border_edges;}
|
||||
|
|
@ -499,7 +499,7 @@ public:
|
|||
// face on one side and to a hole on the other side.
|
||||
// Precondition: `normalize_border()' has been called and no
|
||||
// halfedge insertion or removal and no change in border status of
|
||||
// the halfedges have occured since then.
|
||||
// the halfedges have occurred since then.
|
||||
|
||||
Halfedge_iterator border_halfedges_begin() {
|
||||
// halfedge iterator starting with the border edges. The range [
|
||||
|
|
@ -508,7 +508,7 @@ public:
|
|||
// halfedges_end()') denotes all border edges. Precondition:
|
||||
// `normalize_border()' has been called and no halfedge insertion
|
||||
// or removal and no change in border status of the halfedges have
|
||||
// occured since then.
|
||||
// occurred since then.
|
||||
return border_halfedges;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ Branch Build of CGAL
|
|||
The cmake script at the root of the repository is the one to use to
|
||||
build the CGAL library from a branch. It will collect the list of packages
|
||||
of the branch and will append their include folder to the include path.
|
||||
This is main noticable difference with a build using a regular *flat* release.
|
||||
This is main noticeable difference with a build using a regular *flat* release.
|
||||
|
||||
Here is an example of how to build the library in Debug:
|
||||
``` {.bash}
|
||||
|
|
|
|||
|
|
@ -3791,7 +3791,7 @@ static runtime (/ML).
|
|||
algorithm for placing streamlines in 2D vector fields. It generates
|
||||
a list of streamlines corresponding to an input flow using a
|
||||
specified separating distance. The algorithm uses a Delaunay
|
||||
triangulation to model objects and adress different queries, and
|
||||
triangulation to model objects and address different queries, and
|
||||
relies on choosing the centers of the biggest empty circles to start
|
||||
the integration of the streamlines.
|
||||
- Kinetic Data Structures (new package)
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ main()
|
|||
}
|
||||
catch ( ... )
|
||||
{
|
||||
// Sets the rounding mode to 0 and show that it's realy the case.
|
||||
// Sets the rounding mode to 0 and show that it's really the case.
|
||||
_controlfp( 0, _MCW_RC );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// This header file is a copy of "boost/config/auto_link.hpp"
|
||||
// from boost version 1.44.0
|
||||
// but slightly modified to accomodate CGAL libraries.
|
||||
// but slightly modified to accommodate CGAL libraries.
|
||||
|
||||
// Before CGAL-4.7-beta1, it has been synchronized with
|
||||
// libs/config/ version boost-1.58.0-39-g15d56c9, file
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
Here follows 3 reviews which have been recieved following the submission
|
||||
Here follows 3 reviews which have been received following the submission
|
||||
of the Interpolation package to the editorial board.
|
||||
They have not been completely implemented or replied, so we keep them
|
||||
here in order for the next one who will work on the package to know
|
||||
|
|
@ -96,7 +96,7 @@ method to use under which circumstance.
|
|||
The examples need explanation.
|
||||
The indentation needs work.
|
||||
At the end of the second example, there is a branch that warns if the
|
||||
interpolation was not succesful due to missing function gradients. Can
|
||||
interpolation was not successful due to missing function gradients. Can
|
||||
this really occur, given the rest of the program? If not, I would
|
||||
remove it. If it can occur, I would draw more attention to this fact.
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ side_of_plane_centered_sphereC3(const RT &ax, const RT &ay, const RT &az,
|
|||
//
|
||||
//method:
|
||||
// - tranlation of p to the origin.
|
||||
// - seperate computation of det and norm of the expression
|
||||
// - separate computation of det and norm of the expression
|
||||
|
||||
return side_of_plane_centered_sphere_translateC3(ax-px, ay-py, az-pz,
|
||||
nx, ny, nz,
|
||||
|
|
@ -145,7 +145,7 @@ side_of_plane_centered_sphereC3(const RT &ax, const RT &ay, const RT &az,
|
|||
//
|
||||
//method:
|
||||
// - tranlation of p to the origin.
|
||||
// - seperate computation of det and nom of the expression
|
||||
// - separate computation of det and nom of the expression
|
||||
|
||||
return side_of_plane_centered_sphere_translateC3(ax-px, ay-py, az-pz,
|
||||
nx, ny, nz,
|
||||
|
|
|
|||
|
|
@ -842,7 +842,7 @@ template <class Interval>
|
|||
update[i]->eqMarkers->insert(m->getInterval());
|
||||
|
||||
// Place markers on x for all intervals the cross x.
|
||||
// (Since x is a new node, every marker comming into x must also leave x).
|
||||
// (Since x is a new node, every marker coming into x must also leave x).
|
||||
for(i=0; i<x->level(); i++)
|
||||
x->eqMarkers->copy(x->markers[i]);
|
||||
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ computed using rings on the triangulation. Results are twofold:
|
|||
<LI>a human readable text file featuring the `::CGAL::Monge_via_jet_fitting::Monge_form` and
|
||||
numerical informations on the computation: condition number and the
|
||||
PCA basis;
|
||||
<LI>another text file that records raw data (better for a vizualization
|
||||
<LI>another text file that records raw data (better for a visualization
|
||||
post-processing).
|
||||
</UL>
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ Vector_2(const Kernel::FT &x, const Kernel::FT &y);
|
|||
/// There are two sets of coordinate access functions, namely to the
|
||||
/// homogeneous and to the %Cartesian coordinates. They can be used
|
||||
/// independently from the chosen kernel model. Note that you do not
|
||||
/// loose information with the homogeneous representation, because the
|
||||
/// lose information with the homogeneous representation, because the
|
||||
/// `FieldNumberType` is a quotient.
|
||||
/// @{
|
||||
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ Vector_3(const Kernel::FT &x, const Kernel::FT &y, const Kernel::FT &z);
|
|||
/// There are two sets of coordinate access functions, namely to the
|
||||
/// homogeneous and to the %Cartesian coordinates. They can be used
|
||||
/// independently from the chosen kernel model. Note that you do not
|
||||
/// loose information with the homogeneous representation, because the
|
||||
/// lose information with the homogeneous representation, because the
|
||||
/// `FieldNumberType` is a quotient.
|
||||
/// @{
|
||||
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ double weight() const;
|
|||
class Construct_circumcenter_d {
|
||||
public:
|
||||
/*! returns the center of the sphere defined by `A=tuple[first,last)`. The sphere is centered in the affine hull of A and passes through all the points of A. The order of the points of A does not matter.
|
||||
\pre A is affinely independant.
|
||||
\pre A is affinely independent.
|
||||
\tparam ForwardIterator has `Epick_d::Point_d` as value type.
|
||||
*/
|
||||
template<typename ForwardIterator>
|
||||
|
|
@ -105,7 +105,7 @@ Point_d operator()(ForwardIterator first, ForwardIterator last);
|
|||
class Compute_squared_radius_d {
|
||||
public:
|
||||
/*! returns the radius of the sphere defined by `A=tuple[first,last)`. The sphere is centered in the affine hull of A and passes through all the points of A. The order of the points of A does not matter.
|
||||
\pre A is affinely independant.
|
||||
\pre A is affinely independent.
|
||||
\tparam ForwardIterator has `Epick_d::Point_d` as value type.
|
||||
*/
|
||||
template<class ForwardIterator>
|
||||
|
|
@ -116,7 +116,7 @@ Point_d operator()(ForwardIterator first, ForwardIterator last);
|
|||
class Side_of_bounded_sphere_d {
|
||||
public:
|
||||
/*! returns the relative position of point p to the sphere defined by `A=tuple[first,last)`. The sphere is centered in the affine hull of A and passes through all the points of A. The order of the points of A does not matter.
|
||||
\pre A is affinely independant.
|
||||
\pre A is affinely independent.
|
||||
\tparam ForwardIterator has `Epick_d::Point_d` as value type.
|
||||
*/
|
||||
template<class ForwardIterator>
|
||||
|
|
|
|||
|
|
@ -412,7 +412,7 @@ public:
|
|||
|
||||
/* This predicates takes k+1 points defining a k-sphere in d-dim space, and a
|
||||
* point |x| (assumed to lie in the same affine subspace spanned by the
|
||||
* k-sphere). It tests wether the point |x| lies in the positive or negative
|
||||
* k-sphere). It tests whether the point |x| lies in the positive or negative
|
||||
* side of the k-sphere.
|
||||
* The parameter |axis| contains the indices of k axis of the canonical base of
|
||||
* R^d, on which the affine subspace projects homeomorphically. We can thus
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ namespace CGAL {
|
|||
std::cerr << " " << std::endl;
|
||||
std::cerr << "Polyhedron_scan_OFF<Traits>::" << std::endl;
|
||||
std::cerr << "operator()(): input error: cannot "
|
||||
"succesfully remove isolated vertices."
|
||||
"successfully remove isolated vertices."
|
||||
<< std::endl;
|
||||
}
|
||||
B.rollback();
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ std::string format(std::string input, bool remove_template)
|
|||
if ( input.at(input.size()-1) != '\n' )
|
||||
input.push_back('\n');
|
||||
|
||||
// Add " ! " at the begining of each line
|
||||
// Add " ! " at the beginning of each line
|
||||
size_t prev = 0;
|
||||
pos = input.find("\n");
|
||||
while ( pos != std::string::npos )
|
||||
|
|
|
|||
|
|
@ -204,8 +204,8 @@ private:
|
|||
{
|
||||
const Vertex_handle& v1 = (*cit)->vertex((k+i)&3);
|
||||
|
||||
std::pair<VC_it, bool> is_insert_succesful = treated_vertices.insert(v1);
|
||||
if ( ! is_insert_succesful.second ) // vertex has already been treated
|
||||
std::pair<VC_it, bool> is_insert_successful = treated_vertices.insert(v1);
|
||||
if ( ! is_insert_successful.second ) // vertex has already been treated
|
||||
continue;
|
||||
|
||||
// Vertex has not been treated: turn around edge(v,v1)
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@ private:
|
|||
Curve_index curve_index) const;
|
||||
|
||||
/// Walk along the edge from \c start, following the direction \c start to
|
||||
/// \c next, and fills \c out with the vertices which do not fullfill
|
||||
/// \c next, and fills \c out with the vertices which do not fulfill
|
||||
/// the sampling conditions.
|
||||
///
|
||||
/// \param orientation Orientation of the curve segment between \c v1 and
|
||||
|
|
|
|||
|
|
@ -509,8 +509,8 @@ get_sq_distance_to_closest_vertex(const Tr& tr,
|
|||
tr.is_infinite(vn))
|
||||
continue;
|
||||
|
||||
std::pair<VC_it, bool> is_insert_succesful = treated_vertices.insert(vn);
|
||||
if(! is_insert_succesful.second) // vertex has already been treated
|
||||
std::pair<VC_it, bool> is_insert_successful = treated_vertices.insert(vn);
|
||||
if(! is_insert_successful.second) // vertex has already been treated
|
||||
continue;
|
||||
|
||||
const Point& wpvn = tr.point(c, n);
|
||||
|
|
|
|||
|
|
@ -363,9 +363,9 @@ Decomposition methods that handle polygons with holes are typically
|
|||
more costly than decomposition methods that handle only simple
|
||||
polygons. The hole filtration (see \ref mink_ssec_hole_filter) is
|
||||
applied before the actual construction starts (be it convolution
|
||||
based or decomposition based). The filteration may result with a
|
||||
based or decomposition based). The filtration may result with a
|
||||
polygon that does not have holes, or even a convex polygon, but this
|
||||
is unkown at the time of the call. To this end, we introduce the
|
||||
is unknown at the time of the call. To this end, we introduce the
|
||||
overloaded function template \link minkowski_sum_by_decomposition_2()
|
||||
`minkowski_sum_by_decomposition_2(P, Q, no_holes_decomp, with_holes_decomp)`\endlink,
|
||||
where `no_holes_decomp` and `with_holes_decomp` are objects that model
|
||||
|
|
@ -478,7 +478,7 @@ rational number. Therefore, the line segments that compose the offset
|
|||
boundaries cannot be represented as segments of lines with rational
|
||||
coefficients.
|
||||
In Section \ref mink_ssec_exact_offset we use the line-pair representation
|
||||
to construct the offset polygonin an exact manner using the traits class
|
||||
to construct the offset polygon in an exact manner using the traits class
|
||||
for conic arcs.
|
||||
</UL>
|
||||
|
||||
|
|
@ -601,10 +601,10 @@ handles polygons with holes, such as the
|
|||
An operation closely related to the (outer) offset computation, is
|
||||
computing the <I>inner offset</I> of a polygon, or <I>insetting</I> it
|
||||
by a given radius. The inset of a polygon \f$ P\f$ with radius
|
||||
\f$ r\f$ is the set of points iside \f$ P\f$ the distance of which
|
||||
\f$ r\f$ is the set of points inside \f$ P\f$ the distance of which
|
||||
from the polygon boundary, denoted \f$ \partial P\f$, is at least \f$ r\f$,
|
||||
namely: \f$ \{ p \in P \;|\; {\rm dist}(p, \partial P) \geq r \}\f$.
|
||||
Note that the resulting point set may be dicconnected when \f$ P\f$ is a
|
||||
Note that the resulting point set may be disconnected when \f$ P\f$ is a
|
||||
non-convex polygon that has some narrow components. In such a case the
|
||||
resulting set is characterized by a (possibly empty) set of polygons the
|
||||
edges of which are line segments and circular arcs of radius \f$ r\f$.
|
||||
|
|
@ -659,7 +659,7 @@ millennium with his research work about Minkowski sum construction using the
|
|||
decomposition approach. However, it was only a few years later when Ron Wein
|
||||
developed the first version of this package, which was introduced with
|
||||
release 3.3. The first version of the package contained functionality for
|
||||
computeing the Minkowski sum of two polygons, computing the offset of
|
||||
computing the Minkowski sum of two polygons, computing the offset of
|
||||
a polygon by a disk, and approximating the offset of a polygon by a disk.
|
||||
Release 3.4 contained an enhancement of the offset computation, which allowed
|
||||
for polygon with holes as operands. Release 3.4 also featured new functionality
|
||||
|
|
|
|||
|
|
@ -321,7 +321,7 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
* const typename Minkowski_sum_by_decomposition_2<DecompositionStrategy1_,
|
||||
* DecompositionStrategy2_,
|
||||
* Container_>::Traits_2>
|
||||
* are exchangable except for in one case, where there is an ambiguity.
|
||||
* are exchangeable except for in one case, where there is an ambiguity.
|
||||
* Thus, we use the former, even though it is less generic, as change to the
|
||||
* traits type in Minkowski_sum_by_decomposition_2 would require a similar
|
||||
* change here.
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ of a nonempty finite set of points. Convex polytopes are
|
|||
compact closed and manifold sets.
|
||||
<LI><I>elementary polyhedra</I> normally defined as the union
|
||||
of a finite number of convex polytopes.
|
||||
<LI><I>polyhedral sets</I> nomally defined as the intersection
|
||||
<LI><I>polyhedral sets</I> normally defined as the intersection
|
||||
of a finite number of closed halfspaces. Such sets are closed and
|
||||
convex but need not to be compact.
|
||||
<LI><I>linear polyhedra</I> normally defined as the set of all
|
||||
|
|
@ -61,7 +61,7 @@ the corresponding reference pages.
|
|||
|
||||
\cgalExample{Nef_2/nef_2_construction.cpp}
|
||||
|
||||
Planar halfspaces (as used in the definition) are modelled by oriented
|
||||
Planar halfspaces (as used in the definition) are modeled by oriented
|
||||
lines. In the previous example `N1` is the Nef polyhedron
|
||||
representing the full plane, `N2` is the closed halfspace left of
|
||||
the oriented line with equation \f$ 2x + 4y + 2 = 0\f$ including the line,
|
||||
|
|
|
|||
|
|
@ -332,7 +332,7 @@ class PointLocator {
|
|||
|PLocTraits| which widely controls its behaviour.
|
||||
The traits may even change the return type of a query and its semantics.
|
||||
There are predined traits classes for the LEDA graph types, which are
|
||||
described below in a seperate section.
|
||||
described below in a separate section.
|
||||
}*/
|
||||
public:
|
||||
// copied types from PLocTraits
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ generality. Starting from halfspaces (and also directly from oriented
|
|||
2-manifolds), we can work with set union, set intersection, set
|
||||
difference, set complement, interior, exterior, boundary, closure, and
|
||||
regularization operations (see Section \ref sectoinRegularized
|
||||
for an explaination of regularized
|
||||
for an explanation of regularized
|
||||
set operations). In essence, we can evaluate a CSG-tree with
|
||||
halfspaces as primitives and convert it into a B-rep representation.
|
||||
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ Afterwards the iterator can be casted to the proper handle type.
|
|||
|
||||
\subsection Nef_S2PointLocation Point Location
|
||||
|
||||
Using the `locate` function, it is possible to retrive an item at a
|
||||
Using the `locate` function, it is possible to retrieve an item at a
|
||||
certain location on the sphere. In the following example, the item at
|
||||
location `Sphere_point(1,0,0)` in a random `Nef_polyhedron_S2` is
|
||||
retrieved. `locate` returns an instance of type `Nef_polyhedron_S2::Object_handle`, which
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ template <class T, class = void> struct pool1 {
|
|||
template <class T, class D> std::vector<T> pool1<T,D>::data;
|
||||
|
||||
// Use an intrusive single-linked list instead (allocate one more limb and use
|
||||
// it to store the pointer to next), the difference isn't that noticable (still
|
||||
// it to store the pointer to next), the difference isn't that noticeable (still
|
||||
// the list wins). Neither is thread-safe (both can be with threadlocal, and
|
||||
// the list can be with an atomic compare-exchange (never tried)). With gcc,
|
||||
// TLS has a large effect on classes with constructor/destructor, but is free
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@ private:
|
|||
Curve_index curve_index) const;
|
||||
|
||||
/// Walk along the edge from \c start, following the direction \c start to
|
||||
/// \c next, and fills \c out with the vertices which do not fullfill
|
||||
/// \c next, and fills \c out with the vertices which do not fulfill
|
||||
/// the sampling conditions.
|
||||
///
|
||||
/// \param orientation Orientation of the curve segment between \c v1 and
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ public:
|
|||
// it will have been marked as already visited, and bugs appear...
|
||||
#ifdef CGAL_PERIODIC_TRIANGULATION_USE_VISITED_VERTEX_BOOLEAN
|
||||
// The typedef and the bool are used by Triangulation_data_structure::Vertex_extractor
|
||||
// The names are choosen complicated so that we do not have to document them
|
||||
// The names are chosen complicated so that we do not have to document them
|
||||
// (privacy by obfuscation)
|
||||
typedef bool Has_visited_for_vertex_extractor;
|
||||
bool visited_for_vertex_extractor;
|
||||
|
|
|
|||
|
|
@ -388,7 +388,7 @@ parameter: \f$10\f$, \f$100\f$ and \f$1000\f$. In the 3 cases,
|
|||
|
||||
\subsubsection Point_set_processing_3Hierarchy_simplification_parameter_var_max Parameter: var_max
|
||||
In addition to the size parameter, a variation parameter allows to
|
||||
increase simplification in monotoneous regions. For each cluster, a
|
||||
increase simplification in monotonous regions. For each cluster, a
|
||||
surface variation measure is computed using the sorted eigenvalues of
|
||||
the covariance matrix: \f[ \sigma(p) = \frac{\lambda_0}{\lambda_0 +
|
||||
\lambda_1 + \lambda_2}. \f]
|
||||
|
|
@ -564,7 +564,7 @@ Upsampling for different sharpness_angle parameter values. The input containing
|
|||
\cgalFigureEnd
|
||||
|
||||
\subsubsection Point_set_processing_3upsample_neighborhood_size Parameter: neighbor_radius
|
||||
Usually, the neighborhood of sample points should include at least one ring of neighboring sample points. Using small neighborhood size may not be able to insert new points. Using big neighborhood size can fill small holes, but points inserted on the edges could be irregular. The function will use a neigbhorhood size estimation if this parameter value is set to default or smaller than zero.
|
||||
Usually, the neighborhood of sample points should include at least one ring of neighboring sample points. Using small neighborhood size may not be able to insert new points. Using big neighborhood size can fill small holes, but points inserted on the edges could be irregular. The function will use a neighborhood size estimation if this parameter value is set to default or smaller than zero.
|
||||
|
||||
\cgalFigureBegin{Point_set_processing_3figupsample_neighborhood_size, upsample_neighborhood_size.jpg}
|
||||
Comparison between different sizes of neighbor radius.
|
||||
|
|
@ -665,7 +665,7 @@ Thanks to the carriage return character `\r`, the lines are overwritten and the
|
|||
|
||||
Pierre Alliez and Laurent Saboret contributed the initial component. Nader Salman contributed the grid simplification.
|
||||
Started from GSoC'2013, three new algorithms were implemented by Shihao Wu and Clément Jamin: WLOP, bilateral smoothing and upsampling.
|
||||
Started from GSoC'2014, Jocelyn Meyron with the help of Quentin Mérigot introduced the computation of the Voronoi covarience measure of a point set,
|
||||
Started from GSoC'2014, Jocelyn Meyron with the help of Quentin Mérigot introduced the computation of the Voronoi covariance measure of a point set,
|
||||
as well as the normal and feature edge estimation functions based on it.
|
||||
Florent Lafarge with the help of Simon Giraudot contributed the point set structuring algorithm.
|
||||
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ compute_avg_knn_sq_distance_3(
|
|||
\note There are two thresholds that can be used:
|
||||
`threshold_percent` and `threshold_distance`. This function
|
||||
returns the smallest number of outliers such that at least one of
|
||||
these threshold is fullfilled. This means that if
|
||||
these threshold is fulfilled. This means that if
|
||||
`threshold_percent=100`, only `threshold_distance` is taken into
|
||||
account; if `threshold_distance=0` only `threshold_percent` is
|
||||
taken into account.
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ detected planes.
|
|||
Given a point set in 3D space along with a set of fitted planes, this
|
||||
class stores a simplified and structured version of the point
|
||||
set. Each output point is assigned to one, two or more primitives
|
||||
(depending wether it belongs to a planar section, an edge or a if it
|
||||
(depending whether it belongs to a planar section, an edge or a if it
|
||||
is a vertex). The implementation follow \cgalCite{cgal:la-srpss-13}.
|
||||
|
||||
\tparam Kernel a model of `ShapeDetectionTraits` that must provide in
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ Polygons may be contours of a 3D object, where the contours
|
|||
are organized in parallel slices, generated by segmentation
|
||||
of image data from a scanner.
|
||||
|
||||
In order to avoid an explixit projection on the \c xy plane, one can
|
||||
In order to avoid an explicit projection on the \c xy plane, one can
|
||||
use the traits class `Projection_traits_xy_3` which is part of the 2D
|
||||
and 3D Linear Geometric %Kernel.
|
||||
|
||||
|
|
|
|||
|
|
@ -484,7 +484,7 @@ described in \cgalCite{gueziec2001cutting}.
|
|||
To deal with polygon soups that cannot be converted to a
|
||||
combinatorially manifold surface, some points must be duplicated.
|
||||
Because a polygon soup does not have any connectivity (each point
|
||||
has as many occurences as the number of polygons it belongs to),
|
||||
has as many occurrences as the number of polygons it belongs to),
|
||||
duplicating one point (or a pair of points)
|
||||
amounts to duplicating the polygon to which it belongs.
|
||||
The duplicated points are either an endpoint of an edge incident to more
|
||||
|
|
|
|||
|
|
@ -1197,7 +1197,7 @@ public:
|
|||
// An_edge_per_polyline_map;
|
||||
|
||||
#ifdef CGAL_COREFINEMENT_POLYHEDRA_DEBUG
|
||||
#warning add a mechanism to handle the patches independantly \
|
||||
#warning add a mechanism to handle the patches independently \
|
||||
(for example calculating the volume without \
|
||||
building the polyhedron) \
|
||||
This can be done by using a functor to which we give \
|
||||
|
|
@ -1553,7 +1553,7 @@ public:
|
|||
if (used_to_clip_a_surface)
|
||||
{
|
||||
// The following code is here to handle the case when an intersection polyline
|
||||
// contains some border edges of tm1 that should be considered as an independant polyline.
|
||||
// contains some border edges of tm1 that should be considered as an independent polyline.
|
||||
// This polyline removal should be handled by remove_unused_polylines.
|
||||
// However, since all nodes are of degree 2 the polyline is not split at
|
||||
// the correct point and trouble happen. Here the workaround consists in
|
||||
|
|
|
|||
|
|
@ -708,8 +708,8 @@ std::size_t snap_vertex_range_onto_vertex_range_non_conforming(const HalfedgeRan
|
|||
<< std::distance(target_hrange.begin(), target_hrange.end()) << std::endl;
|
||||
#endif
|
||||
|
||||
typedef std::map<Point, std::set<vertex_descriptor /*target vd*/> > Occurence_map;
|
||||
Occurence_map occurrences_as_target;
|
||||
typedef std::map<Point, std::set<vertex_descriptor /*target vd*/> > Occurrence_map;
|
||||
Occurrence_map occurrences_as_target;
|
||||
for(halfedge_descriptor hd : target_hrange)
|
||||
{
|
||||
vertex_descriptor vd = target(hd, pmt);
|
||||
|
|
@ -717,7 +717,7 @@ std::size_t snap_vertex_range_onto_vertex_range_non_conforming(const HalfedgeRan
|
|||
std::set<vertex_descriptor> corresponding_vd;
|
||||
corresponding_vd.insert(vd);
|
||||
|
||||
std::pair<typename Occurence_map::iterator, bool> is_insert_successful =
|
||||
std::pair<typename Occurrence_map::iterator, bool> is_insert_successful =
|
||||
occurrences_as_target.insert(std::make_pair(get(vpmt, vd), corresponding_vd));
|
||||
if(!is_insert_successful.second) // point already existed in the map
|
||||
is_insert_successful.first->second.insert(vd);
|
||||
|
|
@ -748,17 +748,17 @@ std::size_t snap_vertex_range_onto_vertex_range_non_conforming(const HalfedgeRan
|
|||
}
|
||||
|
||||
const Point& query = get(vpms, vd);
|
||||
const std::set<vertex_descriptor>& occurences = occurrences_as_target[query];
|
||||
const std::set<vertex_descriptor>& occurrences = occurrences_as_target[query];
|
||||
|
||||
// Skip points that are already attached to another border. Keeping it in two 'continue' for clarity.
|
||||
|
||||
// If we are working with a single mesh, the vertex is only blocked if another vertex has the same
|
||||
// position (that is, if occurences.size() > 1)
|
||||
if(is_same_mesh && occurences.size() > 1)
|
||||
// position (that is, if occurrences.size() > 1)
|
||||
if(is_same_mesh && occurrences.size() > 1)
|
||||
continue;
|
||||
|
||||
// If it's not the same mesh, then block as soon as a vertex in the target range has already that position
|
||||
if(!is_same_mesh && !occurences.empty())
|
||||
if(!is_same_mesh && !occurrences.empty())
|
||||
continue;
|
||||
|
||||
// Skip the source vertex if its two incident halfedges are geometrically identical (it means that
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ void test_merge_duplicated_vertices_in_boundary_cycles(const char* fname,
|
|||
expected_nb_vertices == vertices(mesh).size());
|
||||
if (expected_nb_vertices==0)
|
||||
{
|
||||
std::cout << "writting output to out1.off\n";
|
||||
std::cout << "writing output to out1.off\n";
|
||||
std::ofstream output("out1.off");
|
||||
output << std::setprecision(17);
|
||||
output << mesh;
|
||||
|
|
|
|||
|
|
@ -1685,7 +1685,7 @@ void Scene_polyhedron_selection_item::selectPath(fg_vertex_descriptor vh)
|
|||
end_of_path_is_prio = false;
|
||||
//makes the end of the path prioritary over the other points when there is a conflict
|
||||
if(it->vertex == first.vertex &&
|
||||
!(it == d->path.begin())&&// makes the begining of the path impossible to move
|
||||
!(it == d->path.begin())&&// makes the beginning of the path impossible to move
|
||||
end_of_path_is_prio)
|
||||
{
|
||||
if(it!=d->path.end()-1 &&! is_same )
|
||||
|
|
|
|||
|
|
@ -42,5 +42,5 @@ Check what can be pulled in from experimental Mesh_3-protecting branch
|
|||
related to the MERGE with Point_set_demo:
|
||||
- clean up Point_set_3.h and UI_point_3.h
|
||||
- we should probably have a points_item
|
||||
- Points and normal should be seperated items (pb with select and remove)
|
||||
- Points and normal should be separated items (pb with select and remove)
|
||||
|
||||
|
|
|
|||
|
|
@ -1423,7 +1423,7 @@ public:
|
|||
// number of border halfedges. An edge with no incident facet
|
||||
// counts as two border halfedges. Precondition: `normalize_border
|
||||
// ()' has been called and no halfedge insertion or removal and no
|
||||
// change in border status of the halfedges have occured since
|
||||
// change in border status of the halfedges have occurred since
|
||||
// then.
|
||||
return hds_.size_of_border_halfedges();
|
||||
}
|
||||
|
|
@ -1434,7 +1434,7 @@ public:
|
|||
// facet on one side and to a hole on the other side.
|
||||
// Precondition: `normalize_border()' has been called and no
|
||||
// halfedge insertion or removal and no change in border status of
|
||||
// the halfedges have occured since then.
|
||||
// the halfedges have occurred since then.
|
||||
return hds_.size_of_border_edges();
|
||||
}
|
||||
|
||||
|
|
@ -1445,7 +1445,7 @@ public:
|
|||
// halfedges_end()') denotes all border edges. Precondition:
|
||||
// `normalize_border()' has been called and no halfedge insertion
|
||||
// or removal and no change in border status of the halfedges have
|
||||
// occured since then.
|
||||
// occurred since then.
|
||||
return hds_.border_halfedges_begin();
|
||||
}
|
||||
Halfedge_const_iterator border_halfedges_begin() const {
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ public:
|
|||
}
|
||||
if(B.error())
|
||||
{
|
||||
std::cerr << "An error occured while creating a Polyhedron" << std::endl;
|
||||
std::cerr << "An error occurred while creating a Polyhedron" << std::endl;
|
||||
B.rollback();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
\cgalPkgPicture{dist.png}
|
||||
\cgalPkgSummaryBegin
|
||||
\cgalPkgAuthors{Kaspar Fischer, Bernd Gärtner, Thomas Herrmann, Michael Hoffmann, and Sven Schönherr}
|
||||
\cgalPkgDesc{This package provides algorithms for computing the distance between the convex hulls of two point sets in d-dimensional space, without explicitely constructing the convex hulls. It further provides an algorithm to compute the width of a point set, and the furthest point for each vertex of a convex polygon. }
|
||||
\cgalPkgDesc{This package provides algorithms for computing the distance between the convex hulls of two point sets in d-dimensional space, without explicitly constructing the convex hulls. It further provides an algorithm to compute the width of a point set, and the furthest point for each vertex of a convex polygon. }
|
||||
\cgalPkgManuals{Chapter_Optimal_Distances,PkgPolytopeDistanceDRef}
|
||||
\cgalPkgSummaryEnd
|
||||
\cgalPkgShortInfoBegin
|
||||
|
|
|
|||
|
|
@ -777,7 +777,7 @@ class Width_3 {
|
|||
#endif
|
||||
DEBUGENDL(INITIAL_VF_PAIR,"Initial plane E1:",A<<" "<<B<<" "<<C<<" "<<K);
|
||||
DEBUGENDL(INITIAL_VF_PAIR,"Initial plane E2:",A<<" "<<B<<" "<<C<<" "<<D);
|
||||
//set the list of antipodal vertices of f definitly
|
||||
//set the list of antipodal vertices of f definitely
|
||||
dao.set_antipodal_vertices(f,apv);
|
||||
|
||||
//All solutions
|
||||
|
|
|
|||
|
|
@ -717,14 +717,14 @@ public:
|
|||
sets the entry \f$ A_{ij}\f$
|
||||
in column \f$ j\f$ and row \f$ i\f$ of the constraint matrix \f$ A\f$ of `qp` to
|
||||
`val`. An existing entry is overwritten. `qp` is enlarged if
|
||||
necessary to accomodate this entry.
|
||||
necessary to accommodate this entry.
|
||||
*/
|
||||
void set_a (int j, int i, const NT& val);
|
||||
|
||||
/*!
|
||||
sets the entry \f$ b_i\f$
|
||||
of `qp` to `val`. An existing entry is overwritten.
|
||||
`qp` is enlarged if necessary to accomodate this entry.
|
||||
`qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_b (int i, const NT& val);
|
||||
|
||||
|
|
@ -732,28 +732,28 @@ public:
|
|||
sets the entry \f$ \qprel_i\f$ of `qp` to `rel`. `CGAL::SMALLER`
|
||||
means that the \f$ i\f$-th constraint is of type "\f$ \leq\f$", `CGAL::EQUAL`
|
||||
means "\f$ =\f$", and `CGAL::LARGER` encodes "\f$ \geq\f$". An existing entry
|
||||
is overwritten. `qp` is enlarged if necessary to accomodate this entry.
|
||||
is overwritten. `qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_r (int i, CGAL::Comparison_result rel);
|
||||
|
||||
/*!
|
||||
if `is_finite`, this sets the entry \f$ l_j\f$ of `qp` to `val`,
|
||||
otherwise it sets \f$ l_j\f$ to \f$ -\infty\f$. An existing entry is overwritten.
|
||||
`qp` is enlarged if necessary to accomodate this entry.
|
||||
`qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_l (int j, bool is_finite, const NT& val = NT(0));
|
||||
|
||||
/*!
|
||||
if `is_finite`, this sets the entry \f$ u_j\f$ of `qp` to `val`,
|
||||
otherwise it sets \f$ u_j\f$ to \f$ \infty\f$. An existing entry is overwritten.
|
||||
`qp` is enlarged if necessary to accomodate this entry.
|
||||
`qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_u (int j, bool is_finite, const NT& val = NT(0));
|
||||
|
||||
/*!
|
||||
sets the entry \f$ c_j\f$
|
||||
of `qp` to `val`. An existing entry is overwritten.
|
||||
`qp` is enlarged if necessary to accomodate this entry.
|
||||
`qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_c (int j, const NT& val);
|
||||
|
||||
|
|
@ -766,7 +766,7 @@ public:
|
|||
/*!
|
||||
sets the entries
|
||||
\f$ 2D_{ij}\f$ and \f$ 2D_{ji}\f$ of `qp` to `val`. Existing entries are
|
||||
overwritten. `qp` is enlarged if necessary to accomodate these entries.
|
||||
overwritten. `qp` is enlarged if necessary to accommodate these entries.
|
||||
\pre `j <= i`
|
||||
*/
|
||||
void set_d (int i, int j, const NT& val);
|
||||
|
|
@ -921,14 +921,14 @@ public:
|
|||
sets the entry \f$ A_{ij}\f$
|
||||
in column \f$ j\f$ and row \f$ i\f$ of the constraint matrix \f$ A\f$ of `qp` to
|
||||
`val`. An existing entry is overwritten. `qp` is enlarged if
|
||||
necessary to accomodate this entry.
|
||||
necessary to accommodate this entry.
|
||||
*/
|
||||
void set_a (int j, int i, const NT& val);
|
||||
|
||||
/*!
|
||||
sets the entry \f$ b_i\f$
|
||||
of `qp` to `val`. An existing entry is overwritten.
|
||||
`qp` is enlarged if necessary to accomodate this entry.
|
||||
`qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_b (int i, const NT& val);
|
||||
|
||||
|
|
@ -936,28 +936,28 @@ public:
|
|||
sets the entry \f$ \qprel_i\f$ of `qp` to `rel`. `CGAL::SMALLER`
|
||||
means that the \f$ i\f$-th constraint is of type "\f$ \leq\f$", `CGAL::EQUAL`
|
||||
means "\f$ =\f$", and `CGAL::LARGER` encodes "\f$ \geq\f$". An existing entry
|
||||
is overwritten. `qp` is enlarged if necessary to accomodate this entry.
|
||||
is overwritten. `qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_r (int i, CGAL::Comparison_result rel);
|
||||
|
||||
/*!
|
||||
if `is_finite`, this sets the entry \f$ l_j\f$ of `qp` to `val`,
|
||||
otherwise it sets \f$ l_j\f$ to \f$ -\infty\f$. An existing entry is overwritten.
|
||||
`qp` is enlarged if necessary to accomodate this entry.
|
||||
`qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_l (int j, bool is_finite, const NT& val = NT(0));
|
||||
|
||||
/*!
|
||||
if `is_finite`, this sets the entry \f$ u_j\f$ of `qp` to `val`,
|
||||
otherwise it sets \f$ u_j\f$ to \f$ \infty\f$. An existing entry is overwritten.
|
||||
`qp` is enlarged if necessary to accomodate this entry.
|
||||
`qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_u (int j, bool is_finite, const NT& val = NT(0));
|
||||
|
||||
/*!
|
||||
sets the entry \f$ c_j\f$
|
||||
of `qp` to `val`. An existing entry is overwritten.
|
||||
`qp` is enlarged if necessary to accomodate this entry.
|
||||
`qp` is enlarged if necessary to accommodate this entry.
|
||||
*/
|
||||
void set_c (int j, const NT& val);
|
||||
|
||||
|
|
@ -970,7 +970,7 @@ public:
|
|||
/*!
|
||||
sets the entries
|
||||
\f$ 2D_{ij}\f$ and \f$ 2D_{ji}\f$ of `qp` to `val`. Existing entries are
|
||||
overwritten. `qp` is enlarged if necessary to accomodate these entries.
|
||||
overwritten. `qp` is enlarged if necessary to accommodate these entries.
|
||||
\pre `j <= i`
|
||||
*/
|
||||
void set_d (int i, int j, const NT& val);
|
||||
|
|
|
|||
|
|
@ -2865,7 +2865,7 @@ $i \in \hat{B}_{S}$.
|
|||
\begin{enumerate}
|
||||
\item $k \in \hat{N} \cap S$:
|
||||
According to Equation~(\ref{eq:r1_i_B_O_k_N_S}) and the appropriate changes
|
||||
neccessary we obtain
|
||||
necessary we obtain
|
||||
\begin{equation}
|
||||
\label{eq:r2_i_B_O_k_N_S}
|
||||
\left(
|
||||
|
|
@ -2884,7 +2884,7 @@ A_{\sigma(k), k}
|
|||
\end{equation}
|
||||
\item $k \in \hat{N} \cap O$:
|
||||
According to Equation~(\ref{eq:r1_i_B_O_k_N_O}) and the appropriate changes
|
||||
neccessary we obtain
|
||||
necessary we obtain
|
||||
\begin{equation}
|
||||
\label{eq:r2_i_B_O_k_N_O}
|
||||
\left(
|
||||
|
|
@ -2911,7 +2911,7 @@ neccessary we obtain
|
|||
\begin{enumerate}
|
||||
\item $k \in \hat{N} \cap S$:
|
||||
According to Equation~(\ref{eq:r1_i_B_S_k_N_S}) and the appropriate changes
|
||||
neccessary we obtain
|
||||
necessary we obtain
|
||||
\begin{equation}
|
||||
\label{eq:r2_i_B_S_k_N_S}
|
||||
\left(
|
||||
|
|
@ -2930,7 +2930,7 @@ neccessary we obtain
|
|||
\end{equation}
|
||||
\item $k \in \hat{N} \cap O$:
|
||||
According to Equation~(\ref{eq:r1_i_B_S_k_N_O}) and the appropriate changes
|
||||
neccessary we obtain
|
||||
necessary we obtain
|
||||
\begin{eqnarray}
|
||||
\label{eq:r2_i_B_S_k_N_O}
|
||||
\left(
|
||||
|
|
|
|||
|
|
@ -852,7 +852,7 @@ M_{\hat{B}}^{-1}
|
|||
\end{eqnarray}
|
||||
Any solution $x_{\hat{B}}(\mu_{j})$ is feasible for $(UQP(\hat{B}^{u}))$, and is
|
||||
optimal if $\mu_{j}=0$. Let $t_{1}$ be the value of $t$ for which the second
|
||||
event occured in the last iteration of Ratio Test Step~1, then
|
||||
event occurred in the last iteration of Ratio Test Step~1, then
|
||||
$x_{\hat{B}}^{*}(\mu_{j}(t_{1}))$ is the current feasible solution at the
|
||||
beginning of Ratio Test Step~2.
|
||||
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ pricing_helper(int& /*direction*/, Tag_true ) // standard form
|
|||
}
|
||||
}
|
||||
|
||||
// certify non-existance of entering variable, if necessary
|
||||
// certify non-existence of entering variable, if necessary
|
||||
if ( min_j < 0) {
|
||||
|
||||
// update row and column maxima
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ pricing_helper(int& /*direction*/, Tag_true /*is_in_standard_form*/ )
|
|||
}
|
||||
}
|
||||
|
||||
// certify non-existance of entering variable, if necessary
|
||||
// certify non-existence of entering variable, if necessary
|
||||
if ( min_mu == this->nt0) {
|
||||
|
||||
// update row and column maxima
|
||||
|
|
@ -388,7 +388,7 @@ pricing_helper(int& direction, Tag_false /*is_in_standard_form*/ )
|
|||
}
|
||||
}
|
||||
|
||||
// certify non-existance of entering variable, if necessary
|
||||
// certify non-existence of entering variable, if necessary
|
||||
if ( min_j == -1) {
|
||||
|
||||
// update row and column maxima
|
||||
|
|
|
|||
|
|
@ -65,12 +65,12 @@ MPS-files in test_solver_data/masters/cgal/ and for each of them make sure
|
|||
that all its derivatives are present (generating them if need be, see below);
|
||||
finally, it collects a list of all these master and derivative filenames and
|
||||
stores it in test_solver.cin. The test_solver.cin file obtained in this way
|
||||
is what gets commited to the CGAL repository.
|
||||
is what gets committed to the CGAL repository.
|
||||
|
||||
In contrast to this, "./create_test_solver_cin all 0" collects all master
|
||||
MPS-files (i.e., all MPS-files in test_solver_data/masters/), generates (if
|
||||
needed) the derivatives and puts the list of the names of all these files into
|
||||
test_solver.cin. The resulting test_solver.cin should usually not be commited
|
||||
test_solver.cin. The resulting test_solver.cin should usually not be committed
|
||||
to the CGAL repository (it takes too long to run this suite); so you would run
|
||||
"./test_solver < test_solver.cin" only locally.
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue