三维骰子生成算法

时间:2012-07-05 23:22:58

标签: c algorithm 3d

我在C中制作一个应该生成三维骰子的简单测试应用程序。我将使用OpenGL进行实际绘制,但我无法弄清楚如何实际生成顶点。当然,这个测试的重点是看我的算法是否有效,但我发现了一个我无法解决的重大逻辑错误。有人可以指点我一篇文章,网站或者解释这个概念的东西吗?如果没有,虽然我更愿意自己做实际的实现,但C代码是可以接受的。

基本上,这是我在忘记我为算法做的事情之前所做的事情:

void calculateVertices(int sides) {
    BOOL isDone = FALSE;
    int vectorsPerSide = 3;
    VDVector3f *vertices = malloc((sizeof(VDVector3f) * (sides + 1)));
    VDVector3f *normals = malloc((sizeof(VDVector3f) * (sides + 1)));

    while (!isDone) {
        // Start by positioning the first vertex.
        vertices[0] = VDVector3fMake(0.0, 0.0, 1.0);

        for (int index = 1; index <= sides; index ++) {

        }

        // Not a match, increase the number of vectors
        vectorsPerSide ++;
    }
}

基本上,它会循环,直到找到匹配项。这对我来说听起来效率低下,但我对如何做到这一点没有其他想法。第一个顶点实际上将从末尾的数组中删除;我打算用它来创建第一面,这本来可以用来正确定位其他面。

我的主要目标是能够将数字(如30)传递给它,并让它自动设置顶点。我会对单面和双面骰子提出保护,因为我有一些特别的想法。我会将这些顶点输入其他地方。

提前感谢您的帮助!

顺便说一句,我有一个算法可以规范化完成的顶点数组。你不必费心去帮助它。

1 个答案:

答案 0 :(得分:2)

我认为这不可能概括这一点。例如,你如何做出公平的5或9面死?我不认为我见过这样的事情。在维基百科上快速搜索表明,柏拉图固体可能就是你所追求的。 http://en.wikipedia.org/wiki/Platonic_solid