rss
@SunXueHao
rss
@SunXueHao
Basic User
Joined September 22, 2024
Last Active 612 days ago
-
for(Edge* e = edges.head; e != nullptr; e = e->next_node) { Halfedge* h = e->halfedge; Vertex* v1 = h->from; Vertex* v2 = h->inv->from; Vertex* v3 = h->prev->from; Vertex* v4 = h->inv->prev->from; size_t d_Per = std::abs(static_cast<long>(v1->degree()-6)) + std::abs(static_cast<long>(v2->degree()-6)) + std::abs(static_cast<long>(v3->degree()-6)) + std::abs(static_cast<long>(v4->degree()-6)); size_t d_Aft = std::abs(static_cast<long>(v1->degree()-7)) + std::abs(static_cast<long>(v2->degree()-5)) + std::abs(static_cast<long>(v3->degree()-7)) + std::abs(static_cast<long>(v4->degree()-5)); if(d_Per > d_Aft) { flip_edge(e); printf("Flip successful: %zu\n", e->id); } }这是我的边翻转的操作,为什么我翻转边也会卡死,没有理解,我前面的做法是定义了两个 set 类,分别存放要坍缩和分裂的,考虑到一次坍缩少三条边,我坍缩这么来写的:
for(Edge* e : selectedCollapseEdges) { printf("Attempting to collapse edge: %zu\n", e->id); if(selectedCollapseEdges.find(e->halfedge->next->edge) != selectedCollapseEdges.end()) { selectedCollapseEdges.erase(e->halfedge->next->edge); } if(selectedCollapseEdges.find(e->halfedge->inv->next->edge) != selectedCollapseEdges.end()) { selectedCollapseEdges.erase(e->halfedge->inv->next->edge); } collapse_edge(e); printf("Collapse successful: %zu\n", e->id); }这么写感觉怪怪的但是能运行过这一段

这个是我翻转卡死的终端,我不知道是什么原因。 😩 😫 😩 😫Post #3