Data structures Lua中带翼边的实现

Data structures Lua中带翼边的实现,data-structures,lua,love2d,Data Structures,Lua,Love2d,我正在做一个不规则网格的游戏,有人建议我使用Winged Edge数据结构。阅读它的用途似乎足够直截了当,但我根本不知道如何实现它 我的最终目标是能够检测我正在单击的面,以及哪些面与单击的面相邻。有人能帮我走对方向吗 经过进一步的阅读和讨论,我成功地编写了一个非常时髦的Winged Edge库。它是根据麻省理工学院的许可证授权的,所以如果有人想使用它,你是非常受欢迎的 其工作方式如下: Winged Edge的关键特性是每套数据如何引用其他每套数据。每个顶点列出与其连接的所有边,每个边列出连接

我正在做一个不规则网格的游戏,有人建议我使用Winged Edge数据结构。阅读它的用途似乎足够直截了当,但我根本不知道如何实现它

我的最终目标是能够检测我正在单击的面,以及哪些面与单击的面相邻。有人能帮我走对方向吗


经过进一步的阅读和讨论,我成功地编写了一个非常时髦的Winged Edge库。它是根据麻省理工学院的许可证授权的,所以如果有人想使用它,你是非常受欢迎的

其工作方式如下:

Winged Edge的关键特性是每套数据如何引用其他每套数据。每个顶点列出与其连接的所有边,每个边列出连接的顶点和面,每个面列出连接的顶点和边。这一点的作用将在下文中更加明显

首先,我解析了一个波阵面对象文件,得到了一个顶点和面的列表。每个顶点都有XYZ坐标,每个面都有一个与其连接的顶点列表:

obj.vertices = {
    { x=0, y=0, z=0 },
    { x=1, y=0, z=0 },
    { x=1, y=1, z=0 },
    ...
}

obj.faces = {
    { 1, 2, 3 },
    { 1, 2, 4 },
    { 3, 4, 5, 6 },
    ...
}
然后,我为我的翼边(WE)对象创建了三个表:顶点、边和面。我分析了顶点并创建了我们的顶点:

WE.vertices = {
    { edges={}, position={ 0, 0, 0 } },
    { edges={}, position={ 1, 0, 0 } },
    ...
}
然后,我解析这些面,创建我们的边和我们的面,填充所有的引用。这些边有一种特殊情况,它们不仅引用它们所连接的面,而且还引用每个面的上一条边和下一条边。这一点非常重要,因为它允许您遍历面的边以查找与当前面相邻的面:

WE.vertices = {
    { edges={ 1, 2, 3 }, position={ 0, 0, 0 } },
    { edges={ 2, 3, 4 }, position={ 1, 0, 0 } },
    ...
}

WE.edges = {
    { vertices={ 1, 2 }, faces={ face=1, prev_edge=3, next_edge=2 } },
    { vertices={ 2, 3 }, faces={ face=1, prev_edge=1, next_edge=3 } },
    { vertices={ 3, 1 }, faces={ face=1, prev_edge=2, next_edge=1 } },
    ...
}

WE.faces = {
    { edges={ 1, 2, 3 }, vertices={ 1, 2, 3 } },
    { edges={ 2, 3, 4 }, vertices={ 2, 3, 4 } },
    ...
}
使用这样设置的数据结构,可以创建一个函数来检查边所属的面,通过这些边可以收集与任何特定面相邻的所有面以及它们在空间中的位置

我用它来检查哪些面包围了一个面,我点击它来确定是否允许我根据一些游戏逻辑激活该面,比如是否有任何包围的面已经被激活。这的另一个用途是用于面


有关精确执行等更多详细信息,欢迎您浏览上面链接的代码。:)

面是三角形、正方形还是边矩形?因此,您将单击其中一个并获得一个单击事件,您希望能够找到哪些面是直接邻居?单击任意三角形,则相邻为两个正方形和一个三角形;单击任意正方形,相邻为四个三角形;单击任意边矩形,邻居是两个矩形、两个正方形和两个三角形,你能确认吗?是的,这完全正确。我知道这没有多大帮助,但我们的老师用斯洛伐克语制作了这些幻灯片,但其中包含了实际的数据结构代码示例(第6页和其他相关页)我从来都不太明白它们的真正目的,你能详细说明一下你做这件事的方式吗?因为,你不是在回答你自己的问题,只是在宣传你的项目。