【问题标题】:How to check if the Polygon is Concave or Convex?using openGL如何检查多边形是凹面还是凸面?使用openGL
【发布时间】:2017-01-07 03:37:05
【问题描述】:

如何检查多边形是凹的还是凸的?使用openGL。 我将点作为 .txt 文件的输入,然后用这些点绘制一个多边形,然后问题就来了。我需要一种算法来检测多边形的类型。凹面或凸面。

void drawPoints() {
glClear(GL_COLOR_BUFFER_BIT); //Clear display window.
if (points.size()<2) {
   glPointSize(3.0);
   glBegin(GL_POINTS);
}
else {
   glLineWidth(3.0);
   glBegin(GL_LINE_LOOP);
}


   for (int i = 0; i<(int)points.size(); i++) {
   Point& p_i = points[i];
   glVertex2f(p_i.GetX(), p_i.GetY());
}



glEnd();
glFlush(); //Process all OpenGL routines as quickly as possible.

}

【问题讨论】:

    标签: opengl find polygon convex concave


    【解决方案1】:

    如何判断多边形是凹的还是凸的?

    如果在任何两个顶点之间绘制的任何线都没有出现在多边形(填充部分)之外,则多边形被定义为凸面。这是对集合凸性定义的概括。

    那么你如何测试呢?通常的方法是确定多边形的凸包(例如使用Gift Wrapping algorithm),然后测试多边形的所有边是否恰好与其凸包重合。

    使用openGL

    不是。 OpenGL 只是绘制的东西。它不适用于处理几何图形(超出绘制几何图形的要求)。

    【讨论】:

    • 我会改写最后一段。 OpenGL 绝对适用于“处理几何”;这就是着色器的用途。然而,在 OP 的情况下,确定“这个形状是凸的还是凹的”是 OpenGL 的一个糟糕应用,因为虽然巧妙地使用着色器可以解决这个问题,但这样做的好处是什么,当一个人几乎可以当然,只需用 C++(或任何其他语言)编写一个算法来迭代多边形的顶点并检查它的凸度,就可以用更少的时间和内存来解决它。
    • @Xirema:除了几何着色器(在某种程度上)和曲面细分着色器(在非常有限的范围内)之外,OpenGL 着色器完全专注于顶点和基元形式的单一实体,或者只是块体,计算着色器的无形数据。除了需要的一些特殊功能(裁剪和邻接)外,典型的 OpenGL 实现对几何的了解。着色器中的任何“几何知识”都不是来自 OpenGL 实现,而是来自编写着色器的程序员。
    • @Xirema:我知道这对于一个唯一目的是从几何生成图像的 API 来说可能看起来很奇怪,或者非常奇怪。但是 OpenGL 拥有如此广泛的目标受众,任何给予它几何“知识”的尝试只会限制而不是授权想要使用 API 的程序员。几何知识由程序员或第三方提供是有意的。
    • 计算凸包来检查凸度(通常检查比推断更快)是一种矫枉过正。这里有更好的答案:stackoverflow.com/questions/471962/…
    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2011-01-28
    相关资源
    最近更新 更多