【问题标题】:Calculate surface area计算表面积
【发布时间】:2012-07-15 15:33:02
【问题描述】:

对于给定的地形,如何计算其表面积?

到目前为止,我计划使用 Three.js 构建地形,例如:

var geo = new THREE.PlaneGeometry(300, 300, 10, 10);

for (var i = 0; i < geo.vertices.length; i++)
    geo.vertices[i].y = someHeight; // Makes the flat plain into a terrain 

接下来,如果可以遍历几何体的每个底层三角形(即,给 WebGL 数组的 TRIANGLE_STRIP 三角形),则可以对每个三角形的面积求和以获得总表面积。

这种方法听起来正确吗?如果是,如何确定单个三角形的顶点?

欢迎任何其他在 WebGL/Three.js 中构建地形的想法。

【问题讨论】:

  • 你打算用表面积值做什么?
  • @Kevin Hmmm... 这是我需要实施的规范的一部分,老实说,我也不知道应用程序的用户会用它做什么。如果您能指出正确的方向,那就太好了。
  • 最初我认为可以用一组已知点(点云)构建地形,然后重建其表面;但事实证明这并不简单,需要使用诸如 Delaunay Triangulation 之类的算法。 THREE.PlaneGeometry 似乎是另一个不错的解决方案。

标签: webgl three.js


【解决方案1】:

我认为您的方法听起来不错,应该不难实施。

我不熟悉three.js,但我认为确定顶点的位置很容易。您知道顶点在x=0...300z=0...300 之间均匀分布,并且您知道y 坐标。所以[i,j]-th 顶点的位置是[i*300/10, y, j*300/10]

您总共有 10x10 段,每个段由 2 个三角形组成。这是你必须小心的地方。 三角形可以形成两种不同的形状:

------        ------
| \  |        |   /|
|  \ |   or   |  / |
|   \|        | /  |
------        ------

这可能会导致不同的形状和(我对此不完全确定)进入不同的表面积。

当您了解 three.js 究竟是如何创建曲面时,对三角形曲面进行迭代求和应该相对容易。

如果能够在没有对所有三角形进行实际迭代的情况下进行求和,那就太好了,但是,现在,我不知道该怎么做......

【讨论】:

  • 感谢您的回复。我计划使用three.js 库提供的THREE.PlaneGeometry。这为应用程序提供了一个基本的网格。所以我想三角测量也会由three.js处理。我认为应用程序需要知道正确的数据结构(迭代三角形),通过该结构将三角形数据传递到 WebGL 缓冲区。
猜你喜欢
  • 2011-08-12
  • 1970-01-01
  • 2018-01-09
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多