java 使用JTS和DelaunayTriangulationBuilder将三角形转换为折点索引列表

n3schb8v  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(277)

我有一小段代码:

DelaunayTriangulationBuilder builder = new DelaunayTriangulationBuilder();
builder.setSites(geometry);
builder.setTolerance(0.0000001);
Geometry triangulation = builder.getTriangles(new GeometryFactory());

它将镶嵌一个几何体来创建一个三角形列表。我想在3D应用程序中使用这个结果,但为了优化存储空间,我想让它具有以下结构:

  • 唯一顶点的有序列表(外部边的)
  • 表示每个三角形的折点索引(顺时针或逆时针)列表

我很难找到一种使用JTS DelaunayTriangulationBuilder类来实现这一点的有效方法。
任何帮助将不胜感激,谢谢!

dw1jzc5e

dw1jzc5e1#

我认为你不想使用Geometry,而是想使用QuadEdgeSubdivision

QuadEdgeSubdivision quadEdgeSubdivision = builder.getSubdivision();
    @SuppressWarnings("unchecked")
    Collection<QuadEdge> primaryEdges = quadEdgeSubdivision.getPrimaryEdges(false);

    for (QuadEdge edge : primaryEdges) {
      if (quadEdgeSubdivision.isFrameEdge(edge)){
         // this is an outer edge
      }
        // Edges have vertexes and are part of a triangle
        Vertex[] v = new Vertex[3];
        v[0] = edge.orig();
        v[1] = edge.dest();
        v[2] = edge.oNext().dest();
        // or you can get a LineString 
        LineSegment lineSegment = edges[i].toLineSegment();
        ...
     }

您可以在几年前使用wrote about的GeoTools等值线过程中看到这类操作。

相关问题