三个JS:3D对象区域计算(三角化)

时间:2014-03-19 21:07:33

标签: math vector three.js area

我需要在三个JS中计算整个物体的面积/表面。多数民众赞成的东西:

    var _len = object.geometry.faces.length,
        _area = 0.0;

    if (!_len) return 0.0;

    for (var i = 0; i < _len; i++) {
        var va = object.geometry.vertices[object.geometry.faces[i].a];
        var vb = object.geometry.vertices[object.geometry.faces[i].b];
        var vc = object.geometry.vertices[object.geometry.faces[i].c];

        var ab = vb.clone().sub(va);
        var ac = vc.clone().sub(va);

        var cross = new THREE.Vector3();
        cross.crossVectors( ab, ac );

        _area += cross.lengthSq() / 2;
    }

结果有点不对劲。我得到一个浮动值,很好,但比较一个非常小的对象和一个大对象。较小的可以使用提供的代码具有更大的表面。在比较它们时,我检查了许多不同的对象并得到了不现实的值。

实际上,具有最大面部但在整个表面中最小的对象似乎必须具有当前版本代码的最高值。

我希望有人可以查看代码,看看有什么不对。非常感谢!

1 个答案:

答案 0 :(得分:1)

你正在使用lengthSq(),是吗?我猜你需要交叉矢量的长度,而不是长度的平方。