上一篇表面面积量算文章中,我想了两种方式来实现表面面积量算。第一种,比较笨。将多边形所在的屏幕范围内部构造很多个泰森多边形,分别计算笛卡尔面积。累加。其实就是尽量细化内部结构,能够尽量精确求出内部的起伏区域的面积。
上一篇的末尾,我提到:还可以利用PolygonGeometry.granularity属性,细化多边形内部的结构。进而累加计算面积。话不多说,上代码:
private calculateSurfaceAreaNew(positions:Cartesian3[]):number{
let totalArea = 0;
let i0,i1,i2;
let cartographic;
let bottomP1,bottomP2,bottomP3;
let granularity = Math.PI/Math.pow(2,11);
granularity = granularity/64;
const polygonGeometry = Cesium.PolygonGeometry.fromPositions({
positions:positions,
vertexFormat:Cesium.PerInstanceColorAppearance.FLAT_VERTEX_FORMAT,
granularity:granularity,
});
const scratchCartesian1 = new Cesium.Cartesian3();
const scratchCartesian2 = new Cesium.Cartesian3();
const scratchCartesian3 = new Cesium.Cartesian3();
let subTrianglePositions;
const ge

本文探讨了两种计算三维场景中多边形表面面积的方法。一种是通过细化泰森多边形并累加笛卡尔面积,另一种则是利用PolygonGeometry的granularity属性。代码示例展示了如何利用Cesium库进行面积计算。作者发现,虽然细化粒度能提高精度,但可能导致计算延迟。在效率和精度之间,作者倾向于选择前者。此外,该方法适用于地形测量,但不适用于模型计算。
最低0.47元/天 解锁文章
598

被折叠的 条评论
为什么被折叠?



