本文整理汇总了C++中QuadEdge::sym方法的典型用法代码示例。如果您正苦于以下问题:C++ QuadEdge::sym方法的具体用法?C++ QuadEdge::sym怎么用?C++ QuadEdge::sym使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QuadEdge
的用法示例。
在下文中一共展示了QuadEdge::sym方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void
QuadEdge::swap(QuadEdge &e)
{
QuadEdge &a = e.oPrev();
QuadEdge &b = e.sym().oPrev();
splice(e, a);
splice(e.sym(), b);
splice(e, a.lNext());
splice(e.sym(), b.lNext());
e.setOrig(a.dest());
e.setDest(b.dest());
}
示例2: LocateFailureException
QuadEdge& IncrementalDelaunayTriangulator::insertSite(const Vertex &v)
{
/**
* This code is based on Guibas and Stolfi (1985), with minor modifications
* and a bug fix from Dani Lischinski (Graphic Gems 1993). (The modification
* I believe is the test for the inserted site falling exactly on an
* existing edge. Without this test zero-width triangles have been observed
* to be created)
*/
QuadEdge *e = subdiv->locate(v);
if(!e) {
throw LocateFailureException("");
}
if (subdiv->isVertexOfEdge(*e, v)) {
// point is already in subdivision.
return *e;
}
else if (subdiv->isOnEdge(*e, v.getCoordinate())) {
// the point lies exactly on an edge, so delete the edge
// (it will be replaced by a pair of edges which have the point as a vertex)
e = &e->oPrev();
subdiv->remove(e->oNext());
}
/**
* Connect the new point to the vertices of the containing triangle
* (or quadrilateral, if the new point fell on an existing edge.)
*/
QuadEdge* base = &subdiv->makeEdge(e->orig(), v);
QuadEdge::splice(*base, *e);
QuadEdge *startEdge = base;
do {
base = &subdiv->connect(*e, base->sym());
e = &base->oPrev();
} while (&e->lNext() != startEdge);
// Examine suspect edges to ensure that the Delaunay condition
// is satisfied.
do {
QuadEdge* t = &e->oPrev();
if (t->dest().rightOf(*e) &&
v.isInCircle(e->orig(), t->dest(), e->dest())) {
QuadEdge::swap(*e);
e = &e->oPrev();
} else if (&e->oNext() == startEdge) {
return *base; // no more suspect edges.
} else {
e = &e->oNext().lPrev();
}
} while (true);
}