diff options
-rw-r--r-- | rbmp.cpp | 45 |
1 files changed, 19 insertions, 26 deletions
@@ -29,31 +29,28 @@ public: class HalfEdge { private: - unsigned index; Vertex* tail; Vertex* head; public: double oldX; double X; - double w; - void setIndex(unsigned i) {index = i;} - unsigned getIndex() const {return index;} + double weight; void setVertices(Vertex& vt, Vertex& vh) { tail = &vt; head = &vh; } - Vertex* getHead() { - return head; + Vertex& getHead() { + return *head; } - Vertex* getTail() { - return tail; + Vertex& getTail() { + return *tail; } - const Vertex* getHead() const { - return head; + const Vertex& getHead() const { + return *head; } - const Vertex* getTail() const { - return tail; + const Vertex& getTail() const { + return *tail; } }; @@ -70,8 +67,6 @@ public: blueVertices[i].setIndex(i); } for (unsigned i = 0; i < redEdges.size(); i++) { - redEdges[i].setIndex(i); - blueEdges[i].setIndex(i); Vertex& blueVertex = blueVertices[(i % (2 * n)) / 2 + n * (((i + 2*n) / 4) / n)]; Vertex& redVertex = redVertices[(1+(i % (2 * n))) / 2 + (n + 1) * ((i / 4) / (n))]; redEdges[i].setVertices(redVertex, blueVertex); @@ -83,28 +78,26 @@ public: redEdges[i].oldX = 0; blueEdges[i].oldX = 0; double w = r.variate<double, std::exponential_distribution>(1); - redEdges[i].w = w; - blueEdges[i].w = w; + redEdges[i].weight = w; + blueEdges[i].weight = w; } } void propagateBeliefs() { for (HalfEdge& e : redEdges) { double Xt = std::numeric_limits<double>::infinity(); - const Vertex* head = e.getHead(); - for (const HalfEdge* en : head->neighbors) { - if (e.getTail()->getIndex() != en->getHead()->getIndex()) { - Xt = std::min(en->w - en->oldX, Xt); + for (const HalfEdge* en : e.getHead().neighbors) { + if (e.getTail().getIndex() != en->getHead().getIndex()) { + Xt = std::min(en->weight - en->oldX, Xt); } } e.X = Xt; } for (HalfEdge& e : blueEdges) { double Xt = std::numeric_limits<double>::infinity(); - const Vertex* head = e.getHead(); - for (const HalfEdge* en : head->neighbors) { - if (e.getTail()->getIndex() != en->getHead()->getIndex()) { - Xt = std::min(en->w - en->oldX, Xt); + for (const HalfEdge* en : e.getHead().neighbors) { + if (e.getTail().getIndex() != en->getHead().getIndex()) { + Xt = std::min(en->weight - en->oldX, Xt); } } e.X = Xt; @@ -128,11 +121,11 @@ int main() { } for (unsigned i = 0; i < G.blueEdges.size(); i++) { - std::cout << G.blueEdges[i].getTail()->getIndex() << " " << G.blueEdges[i].getHead()->getIndex() + G.blueVertices.size() << std::endl; + std::cout << G.blueEdges[i].getTail().getIndex() << " " << G.blueEdges[i].getHead().getIndex() + G.blueVertices.size() << std::endl; } for (unsigned i = 0; i < G.blueEdges.size(); i++) { if (G.blueEdges[i].X + G.redEdges[i].X >= 0) { - std::cout << G.blueEdges[i].getTail()->getIndex() << " " << G.blueEdges[i].getHead()->getIndex() + G.blueVertices.size() << std::endl; + std::cout << G.blueEdges[i].getTail().getIndex() << " " << G.blueEdges[i].getHead().getIndex() + G.blueVertices.size() << std::endl; } } |