这是一个相当补救的问题。我一直在查看JTS DelaunayTriangulationBuilder的文档,我不知道该如何做似乎应该是一件简单的事情。我希望得到一系列点,对它们进行三角测量,然后在该网格内插入随机点的Z值。从粗略阅读如何做到这一点并不明显。有任何想法吗?
答案 0 :(得分:3)
在加载三角测量对象后,在其上调用getSubdivision()
以获得三角测量。它使用quad-edge数据结构,稍后您将需要它。 (如果您知道半边缘或边缘边缘表示是什么,则更容易理解。)结果QuadEdgeSubdivision
有一个方法locate
,给定一个坐标,返回一个封闭的边缘之一三角形(作为四边形)。使用orig()
获取其原点顶点,并使用dest()
获取其目标顶点。获得oNext()
的另一个边缘它的目标顶点是第三个顶点(也是dPrev()。origin()是相同的顶点)。现在您有三个顶点,将您的测试点表示为Vertex
并调用interpolateZValue
。
例如:
public static double
interpolateZ(DelaunayTriangulationBuilder triangulation,
Coordinate coordinate) {
QuadEdgeSubdivision quadEdgeSubdivision = triangulation.getSubdivision();
QuadEdge edge = quadEdgeSubdivision.locate(coordinate);
return new Vertex(coordinate.x, coordinate.y)
.interpolateZValue(edge.orig(), edge.dest(), edge.oNext().dest());
}
但是,你是对的。如何通过阅读他们的API来做到这一点并不明显。
答案 1 :(得分:2)
我不熟悉JTS DelauneyTriangulationBuilder,但听起来你有一个点(x,y,z)
的集合,并且你正在向三角形提交2D (x,y)
对。这为您提供了(x,y)
点的平面三角剖分,也是一个顶点为原始(x,y,z)
点的网格。
一旦进行了三角测量,您希望在网格上找到与平面点(p,q,r)
对应的点(p,q)
。为此,请找到包含T
的Delauney三角剖分的三角形(p,q)
。找到相对于(p,q)
T
的{{3}},并使用这些来计算与{{1}的顶点对应的r
值的加权平均z
}}。加权平均值是您正在寻找的T
值。换句话说,Z
在网格上。