Ejemplo n.º 1
0
void AlexanderMove::execute(std::vector<Vertex*>& vertices) {
    Triangle* first, *second;
    Vertex::getAdjacentTriangles(u, v, &first, &second);

    Vertex* c = first->getThirdVertex(u, v);
    Vertex* d = second->getThirdVertex(u, v);

    /* Get link types */
    bool lAB = first->isTimelike(u, v);
    bool lAC = first->isTimelike(u, c);
    bool lCB = first->isTimelike(c, v);
    bool lAD = second->isTimelike(u, d);
    bool lBD = second->isTimelike(v, d);
    bool newLink = !lAB;

    Vertex* e = new Vertex(); // new vertex
    new Triangle(u, c, e, lAC, newLink, lAB);
    new Triangle(e, c, v, newLink, lCB, lAB);
    new Triangle(u, e, d, lAB, newLink, lAD);
    new Triangle(e, v, d, lAB, lBD, newLink);

    vertices.push_back(e);
    first->removeFromVertices();
    second->removeFromVertices();
    delete first;
    delete second;

    BOOST_ASSERT(u->checkCausality());
    BOOST_ASSERT(v->checkCausality());
    BOOST_ASSERT(c->checkCausality());
    BOOST_ASSERT(d->checkCausality());
    BOOST_ASSERT(e->checkCausality());
}
Ejemplo n.º 2
0
void FlipMove::execute(std::vector<Vertex*>& vertices) {
    Triangle* first, *second;
    Vertex::getAdjacentTriangles(u, v, &first, &second);

    Vertex* c = first->getThirdVertex(u, v);
    Vertex* d = second->getThirdVertex(u, v);

    /* Get link types */
    bool lNew = first->isTimelike(u, v) ^ change;
    bool lAC = first->isTimelike(u, c);
    bool lCB = first->isTimelike(c, v);
    bool lAD = second->isTimelike(u, d);
    bool lBD = second->isTimelike(v, d);

    new Triangle(u, c, d, lAC, lNew, lAD);
    new Triangle(c, v, d, lCB, lBD, lNew);

    first->removeFromVertices();
    second->removeFromVertices();
    delete first;
    delete second;

    BOOST_ASSERT(u->checkCausality());
    BOOST_ASSERT(v->checkCausality());
    BOOST_ASSERT(c->checkCausality());
    BOOST_ASSERT(d->checkCausality());
}