C++分层表示2D顶点、线段和三角形的数据结构(缓冲区)

C++ Data structure (buffer) representing 2D vertices, line segments and triangles hierarchically

本文关键字:三角形 数据结构 缓冲区 表示 分层 2D 顶点 C++      更新时间:2023-10-16

我已经编写了一个表示元素缓冲区的模板化类。现在,我必须在这个缓冲区中插入2D顶点(这很简单,也很容易)。现在我想创建一个缓冲区,表示线段,顶点基于2D缓冲区顶点。例如,在我的"顶点缓冲区"中,我插入了2个顶点。然后我创建一个"线段缓冲区",并插入一个线段。该线段末端由"顶点缓冲区"中的2个顶点表示。现在,如果我更改"顶点缓冲区"中一个顶点的坐标,线段坐标也必须更改。它是等级结构之王。2D顶点<=线段<=三角形

Mu缓冲类看起来像:

template <class T>
class Buffer
{
public:
    Buffer(Buffer& buffer);
    Buffer(size_t initialBufferSize = 1);
    ~Buffer();
    Buffer& operator=(const Buffer& buffer);
    T& Buffer::operator[](const int nIndex);
    void insertElement(T element);
    void deleteElement(size_t index);
    size_t count();
private:
    T* elements_;
    size_t elementsCount_;
    size_t bufferSize_;
    void resizeBuffer(size_t newBufferSize);
};

deleteElement方法:

template <class T>
void Buffer<T>::deleteElement(size_t index)
{
    if (index >= elementsCount_)
        throw "No element at specified index";
    if (elementsCount_-index-1 > 0)
        memcpy(elements_+index, elements_+index+1, (elementsCount_-index-1)*sizeof(T));
    elementsCount_--;
}

问题是当我从"顶点缓冲区"中删除一个顶点时。线段指向已删除顶点的指针将无效。我该如何处理这种情况?

基本上,我有一个顶点缓冲区,并希望根据我得到的顶点创建线段和三角形。

PS:线段结构看起来像这样:

struct LineSegment {
Buffer<Vertex>* buffer;
size_t indexOfVertexA, indexOfVertexB;
//Now if I want to access the lineSegment vertices, I use **lineSegment.buffer[indexOfVertexA]**
}

您应该查看std::shared_ptr:http://www.cplusplus.com/reference/memory/shared_ptr/

您应该使用数据结构方便地组织删除。

删除顶点-->涉及哪些线段-->哪些三角形。并删除所有引用