c++ - 如何在 C++ 中分割边缘

标签 c++ model graph-algorithm computational-geometry 3d-model

最近学习了循环 segmentation ,用Qt实现了一部分。 我想通过计算新点的位置, split 边缘和翻转边缘来 segmentation “三角形”。但是我自己的“splitEdge()”似乎存在一些问题。

我不知道为什么。非常感谢。

// definition.
struct HalfEdge{
    bool old;
    Vertex * origin;
    HalfEdge * pair;
    HalfEdge * prev;
    HalfEdge * next;
    Face * face;
};
struct Vertex{
    bool old;
    QVector3D pos, newPos;
    HalfEdge * edge;
};
struct Face{
    HalfEdge * edge;
};
// the problem splitEgde()
void Mesh::splitEdge(HalfEdge *e){
    HalfEdge * prev = e->prev;
    HalfEdge * next = e->next;
    HalfEdge * p = e->pair;
    Vertex * v = new Vertex();
    v->pos = v->newPos = newVertexPosition[e];
    v->old = false;
    HalfEdge * eNext = new HalfEdge();
    HalfEdge * vOut = new HalfEdge();
    HalfEdge * vIn = new HalfEdge();
    Face * vFace = new Face();
    /******** face A *******/
    // edge
    e->next = eNext;
    eNext->old = false;
    eNext->origin = v;
    eNext->pair = vIn;
    eNext->prev = e;
    eNext->next = prev;
    eNext->face = e->face;
    prev->prev = eNext;
    // vertex
    // face
    e->face->edge = e;
    /******** face A *******/
    /******** face B *******/
    // edge
    vOut->old = true; // !!
    vOut->origin = v;
    vOut->pair = NULL;
    vOut->prev = vIn;
    vOut->next = next;
    vOut->face = vFace;
    next->prev = vOut;
    next->next = vIn;
    next->face = vFace;
    vIn->old = false;
    vIn->origin = prev->origin;
    vIn->pair = eNext;
    vIn->prev = next;
    vIn->next = vOut;
    vIn->face = vFace;
    // vertex
    v->edge = eNext;
    // face
    vFace->edge = vOut;
    /******** face B *******/
    //the rest is updating the data
}

错误:build-Subdivision-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/SubdivisionWithLighting.exe 崩溃了。

最佳答案

我已经做了,这是一个愚蠢的错误。我忘记处理图形内部边缘的情况。现在我已经完美地实现了它。

关于c++ - 如何在 C++ 中分割边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55689455/

相关文章:

algorithm - 有向图广度优先搜索期间的边分类

algorithm - Cut-Property 是两种方式吗?

c++ - 如何从函数返回两个值?

C++:我可以在函数调用期间将 vector <derived_class> 转换为 vector <base_class> 吗?

c++ - Netbeans 如何中断 c++ 项目的异常

asp.net-mvc - View 和模型之间是否存在依赖关系?

ruby-on-rails - Rails 模型测试

ruby-on-rails - has_one/has_many 具有依赖销毁功能,但对键使用不同的名称

algorithm - 完全图的最大加权配对算法

c++ - 在 C++ 和 Eclipse 上包含字符串类