【问题标题】:How to split the edge in C++如何在 C++ 中分割边缘
【发布时间】:2019-09-05 10:50:28
【问题描述】:

我最近学习了循环细分,并通过 Qt 实现了其中的一些。 我想通过计算新点的位置,分割边缘和翻转边缘来细分“三角形”。但是我自己的“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 crashed。

【问题讨论】:

  • 所以你的程序崩溃了?它在哪里崩溃?什么样的崩溃?到目前为止,您使用调试器发现了什么?理想情况下,提供MCVE。除此之外,这个问题似乎和Qt一点关系都没有!?
  • 对不起,这是一个非常大的项目,所以我不能发布整个代码。调试器什么也没告诉我,但它崩溃了。我只是设定了点,然后我知道这是我要完成的部分post above 的问题。我使用QT编辑它,所以我添加标签
  • 如果没有 MCVE 或至少不知道它到底在哪里崩溃,恐怕我们真的无法为您提供帮助。你用的是什么调试器?您在调试调试版本吗?

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


【解决方案1】:

我已经完成了,这是一个愚蠢的错误。我忘了处理图中边缘的情况。现在我已经完美地实现了。

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2014-06-08
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    相关资源
    最近更新 更多