我试图在Three.js的网格中找到与特定顶点相邻的三角形区域。
我知道three.js中的面部表示网格中顶点的连接方式,但我没有找到一种有效的方法来查找与特定顶点相邻的所有三角形的索引集。
下面的代码是我能想到的最好的代码,但是如果有一个超过16,000个顶点(非重复的)和超过5,000个面的大网格,则循环运行> 80米的时间太长了。
另外,我的if函数检查面中的a,b或c位置是否与当前循环中的顶点的位置相匹配,根本不起作用。
var objectFace = object.geometry.faces;
var objectVertex = object.geometry.vertices;
for( var m = 0; m < objectVertex.length; m++ ) {
for( var q = 0; q < objectFace.length; q++ ) {
fArray = objectFace[q];
if ( fArray.a = m || fArray.b = m || fArray.c = m ) {
var va = fArray.a;
var vb = fArray.b;
var vc = fArray.c;
var v1 = objectVertex[va];
var v2 = objectVertex[vb];
var v3 = objectVertex[vc];
var vec1 = [( v2.x - v1.x ), ( v2.y - v1.y ), ( v2.z - v1.z )];
var vec2 = [( v3.x - v1.x ), ( v3.y - v1.y ), ( v3.z - v1.z )];
//calculate area of triangle with Heron's equation
//store area values in array
}
};
};
然后,我通过交叉两个向量并将它们插入Heron方程来计算面积。
非常感谢任何帮助。
* ps我知道我的JS技能不是很好,但这是我能想到的最好的。
答案 0 :(得分:2)
您似乎正在尝试为所有顶点执行此操作。因此,不是循环遍历每个顶点,每个面,然后整理非入射面,您可以循环遍历面并累积相应顶点的结果:
[Pseudo code]
for each face
a := calculate face area
areas[facce.first vertex] += a
areas[facce.second vertex] += a
areas[facce.third vertex] += a
next