diff options
| -rw-r--r-- | rbmp.cpp | 23 | 
1 files changed, 18 insertions, 5 deletions
| @@ -63,8 +63,11 @@ public:      red.addEdge(halfedges[0]);      blue.addEdge(halfedges[1]);    } +  double belief() const { +    return halfedges[0].X + halfedges[1].X; +  }    bool active() const { -    return halfedges[0].X + halfedges[1].X >= 0; +    return belief() >= 0;    }  }; @@ -89,7 +92,7 @@ public:      }    } -  void propagateBeliefs() { +  double propagateBeliefs() {      for (Edge& e : edges) {        for (HalfEdge& h : e.halfedges) {          h.X = std::numeric_limits<double>::infinity(); @@ -101,22 +104,32 @@ public:        }      } +    double minBelief = std::numeric_limits<double>::infinity();      for (Edge& e : edges) { +      minBelief = std::min(std::abs(e.belief()), minBelief);        for (HalfEdge& he : e.halfedges) {          he.oldX = he.X;        }      } + +    return minBelief;    }  };  int main() {    unsigned n = 100; -  unsigned steps = 1e5; +  unsigned maxSteps = 1e7; +  double beliefThreshold = 0.1; +    Rng r;    Graph G(n, r); -  for (unsigned i = 0; i < steps; i++) { -    G.propagateBeliefs(); +  unsigned steps = 0; +  double minBelief = 0; + +  while (minBelief < beliefThreshold && steps < maxSteps) { +    minBelief = G.propagateBeliefs(); +    steps++;    }    for (unsigned i = 0; i < G.edges.size(); i++) { | 
