diff options
Diffstat (limited to 'lib/src')
-rw-r--r-- | lib/src/graph.cpp | 30 | ||||
-rw-r--r-- | lib/src/problem.cpp | 12 |
2 files changed, 31 insertions, 11 deletions
diff --git a/lib/src/graph.cpp b/lib/src/graph.cpp index c75d466..1c770e9 100644 --- a/lib/src/graph.cpp +++ b/lib/src/graph.cpp @@ -445,14 +445,14 @@ void graph::helper(unsigned nv, std::mt19937& rng) { jcv_diagram_free(&diagram); } -graph::coordinate reverse(const graph::coordinate& x) { return {x.y, x.x}; } +coordinate reverse(const coordinate& x) { return {x.y, x.x}; } graph const graph::rotate() { graph g2(*this); for (graph::vertex& v : g2.vertices) { v.r = reverse(v.r); - for (graph::coordinate& r : v.polygon) { + for (coordinate& r : v.polygon) { r = reverse(r); } } @@ -464,7 +464,7 @@ graph const graph::rotate() { for (graph::vertex& v : g2.dual_vertices) { v.r = reverse(v.r); - for (graph::coordinate& r : v.polygon) { + for (coordinate& r : v.polygon) { r = reverse(r); } } @@ -490,7 +490,7 @@ std::string graph::write() const { output += "},\"vp\"->{"; for (const graph::vertex &v : vertices) { output += "{"; - for (const graph::coordinate &r : v.polygon) { + for (const coordinate &r : v.polygon) { output += "{" + std::to_string(r.x) + "," + std::to_string(r.y) + "},"; } output.pop_back(); @@ -505,7 +505,7 @@ std::string graph::write() const { output += "},\"up\"->{"; for (const graph::vertex &v : dual_vertices) { output += "{"; - for (const graph::coordinate &r : v.polygon) { + for (const coordinate &r : v.polygon) { output += "{" + std::to_string(r.x) + "," + std::to_string(r.y) + "},"; } output.pop_back(); @@ -536,3 +536,23 @@ std::string graph::write() const { return output; } + +coordinate graph::Δr(unsigned e) const { + coordinate tmp = dual_vertices[dual_edges[e].v[1]].r - dual_vertices[dual_edges[e].v[0]].r; + if (dual_edges[e].crossings[0]) { + if (tmp.x > 0) { + tmp.x -= L.x; + } else { + tmp.x += L.x; + } + } + if (dual_edges[e].crossings[1]) { + if (tmp.y > 0) { + tmp.y -= L.y; + } else { + tmp.y += L.y; + } + } + + return tmp; +} diff --git a/lib/src/problem.cpp b/lib/src/problem.cpp index ab87b0c..a029d66 100644 --- a/lib/src/problem.cpp +++ b/lib/src/problem.cpp @@ -9,8 +9,8 @@ problem::problem(const graph& G, unsigned axis, cholmod_sparse* vcmat, cholmod_c : G(G), axis(axis), voltcurmat(vcmat), c(c) { b = CHOL_F(zeros)(G.vertices.size(), 1, CHOLMOD_REAL, c); for (unsigned i = 0; i < G.edges.size(); i++) { - graph::coordinate v0 = G.vertices[G.edges[i].v[0]].r; - graph::coordinate v1 = G.vertices[G.edges[i].v[1]].r; + coordinate v0 = G.vertices[G.edges[i].v[0]].r; + coordinate v1 = G.vertices[G.edges[i].v[1]].r; if (G.edges[i].crossings[axis]) { bool ind; @@ -131,8 +131,8 @@ void problem::solve(std::vector<bool>& fuses) { } else { sol.currents[i] = ((double*)y->x)[i]; - graph::coordinate v0 = G.vertices[G.edges[i].v[0]].r; - graph::coordinate v1 = G.vertices[G.edges[i].v[1]].r; + coordinate v0 = G.vertices[G.edges[i].v[0]].r; + coordinate v1 = G.vertices[G.edges[i].v[1]].r; if (G.edges[i].crossings[axis]) { bool comp; @@ -196,8 +196,8 @@ void problem::break_edge(unsigned e, bool unbreak) { CHOL_F(free_sparse)(&perm_update_mat, c); CHOL_F(free_sparse)(&update_mat, c); - graph::coordinate r0 = G.vertices[v0].r; - graph::coordinate r1 = G.vertices[v1].r; + coordinate r0 = G.vertices[v0].r; + coordinate r1 = G.vertices[v1].r; if (G.edges[e].crossings[axis]) { bool ind; |