首页 > 解决方案 > 如何计算构成多边形中每个三角形的顶点?

问题描述

我目前正在使用 Opengl,并且正在尝试创建一个可以自动计算多边形的顶点缓冲区数据和元素缓冲区数据的类。

下面是创建顶点数据的代码:


        float centerangle = (float)(2*Math.PI / sides);
        ArrayList verticies = new ArrayList<Float>();

        for (int i=0; i<sides; i++) {
            float angle = (i*centerangle);
            float x = (float)Math.round(Math.cos(ang))/2f;
            float y = (float)Math.round(Math.sin(ang))/2f;
            float z = 0.0f;

            verticies.add(x);
            verticies.add(y);
            verticies.add(z);

        }

        return verticies;

鉴于sides == 5此方法创建以下值:

float[] {
    0.5, 0.0, 0.0,
    0.0, 0.5, 0.0,
   -0.5, 0.5, 0.0,
   -0.5, -0.5, 0.0,
    0.0, -0.5, 0.0
}

我正在尝试创建一个现在将生成元素缓冲区数据的方法。截至目前,我已经对其进行了硬编码。例如,对于五边形,元素缓冲区数据如下所示:

        new int[] {
                1,2,3,
                3,1,4,
                0,1,4
        };

这会创建 3 个像这样的三角形

所以我的问题是有没有一种方法可以计算我的方法创建的任何多边形的元素缓冲区数据?那会是什么样子?

标签: javamathgeometry

解决方案


对于凸多边形,您可以使用简单的方法 - 选择三个顶部顶点,制作三角形,然后在每一步制作新三角形,以获得最顶部未使用的顶点(从上到下的条形三角形)。还范三角

如果多边形可能是凹的,则需要更复杂的多边形三角剖分方法(注意这与点云三角剖分不同)。Wiki 页面简要描述了一些算法。

随手发现的Java实现剪耳的例子:


推荐阅读