reg3:: fixed an issue with subcubes not working for low subcube_counts
This commit is contained in:
parent
41faa43f65
commit
064c6015b6
33
reg3.cpp
33
reg3.cpp
|
@ -734,13 +734,11 @@ EX namespace reg3 {
|
||||||
for(auto& w: cgi.vertices_only)
|
for(auto& w: cgi.vertices_only)
|
||||||
if(buckets.count(bucketer(T*w)))
|
if(buckets.count(bucketer(T*w)))
|
||||||
found_va = true;
|
found_va = true;
|
||||||
if(sphere) found_va = true;
|
|
||||||
if(!found_va) continue;
|
if(!found_va) continue;
|
||||||
va.emplace_back(vertex_adjacency_info{allh[va[i].h_id]->move(d)->fieldval, T, va[i].move_sequence});
|
va.emplace_back(vertex_adjacency_info{allh[va[i].h_id]->move(d)->fieldval, T, va[i].move_sequence});
|
||||||
va.back().move_sequence.push_back(d);
|
va.back().move_sequence.push_back(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
println(hlog, "vas found = ", isize(va));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
map<int, int> by_sides;
|
map<int, int> by_sides;
|
||||||
|
@ -794,19 +792,40 @@ EX namespace reg3 {
|
||||||
for(int i=0; i<c->type; i++) {
|
for(int i=0; i<c->type; i++) {
|
||||||
int found = 0;
|
int found = 0;
|
||||||
hyperpoint ctr = ss[id].face_centers[i];
|
hyperpoint ctr = ss[id].face_centers[i];
|
||||||
for(auto& va: vertex_adjacencies[c->master->fieldval]) {
|
transmatrix T1 = Id;
|
||||||
|
int h_id = c->master->fieldval;
|
||||||
|
vector<int> path;
|
||||||
|
while(true) {
|
||||||
|
int d = -1;
|
||||||
|
ld dist = hdist0(ctr);
|
||||||
|
for(int d1=0; d1<S7; d1++) {
|
||||||
|
auto ctr1 = iso_inverse(tmatrices[h_id][d1]) * ctr;
|
||||||
|
ld dist1 = hdist0(ctr1);
|
||||||
|
if(dist1 < dist - 1e-6) d = d1, dist = dist1;
|
||||||
|
}
|
||||||
|
if(d == -1) break;
|
||||||
|
path.push_back(d);
|
||||||
|
T1 = T1 * tmatrices[h_id][d];
|
||||||
|
ctr = iso_inverse(tmatrices[h_id][d]) * ctr;
|
||||||
|
h_id = allh[h_id]->move(d)->fieldval;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(auto& va: vertex_adjacencies[h_id]) {
|
||||||
hyperpoint ctr1 = iso_inverse(va.T) * ctr;
|
hyperpoint ctr1 = iso_inverse(va.T) * ctr;
|
||||||
auto bucket = bucketer(ctr1);
|
auto bucket = bucketer(ctr1);
|
||||||
for(auto p: which_cell[va.h_id][bucket]) {
|
for(auto p: which_cell[va.h_id][bucket]) {
|
||||||
cell *c1 = p.first;
|
cell *c1 = p.first;
|
||||||
int j = p.second;
|
int j = p.second;
|
||||||
if(c == c1 && va.move_sequence.empty()) continue;
|
|
||||||
int id1 = local_id[c1].second;
|
int id1 = local_id[c1].second;
|
||||||
if(hdist(ctr1, ss[id1].face_centers[j]) < 1e-6) {
|
if(hdist(ctr1, ss[id1].face_centers[j]) < 1e-6) {
|
||||||
|
transmatrix T2 = T1 * va.T;
|
||||||
|
if(id == id1 && eqmatrix(T2, Id)) continue;
|
||||||
c->c.connect(i, c1, j, false);
|
c->c.connect(i, c1, j, false);
|
||||||
if(!found) {
|
if(!found) {
|
||||||
tmcell.push_back(ss[id].from_cellcenter * va.T * ss[id1].to_cellcenter);
|
tmcell.push_back(ss[id].from_cellcenter * T2 * ss[id1].to_cellcenter);
|
||||||
move_sequences[local_id[c].first].push_back(va.move_sequence);
|
auto& ms = move_sequences[local_id[c].first];
|
||||||
|
ms.push_back(path);
|
||||||
|
for(auto dir: va.move_sequence) ms.back().push_back(dir);
|
||||||
}
|
}
|
||||||
foundtab_ids.emplace_back(va.h_id, id1, j);
|
foundtab_ids.emplace_back(va.h_id, id1, j);
|
||||||
found++;
|
found++;
|
||||||
|
|
Loading…
Reference in New Issue