【问题标题】:ThreeJS: 3D Object Area Calculation (Triangulated)ThreeJS:3D 对象面积计算(三角化)
【发布时间】:2014-04-26 10:08:37
【问题描述】:

我需要在threeJS 中计算整个对象的面积/表面。这就是我所拥有的:

    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;
    }

结果有点错误。我得到一个浮点值,很好,但是将一个非常小的对象与一个大对象进行比较。使用提供的代码,较小的可能具有更大的表面。在比较它们时,我检查了许多不同的对象并得到了不切实际的值。

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

我希望有人可以看看代码,看看有什么问题。非常感谢!

【问题讨论】:

  • 在最后一行你说'=+'。我想你的意思是'+='
  • 你是对的,应该是“+=”而不是“=+”。但不幸的是它并没有解决问题。

标签: math vector three.js area


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2023-03-24
    • 2017-11-21
    • 1970-01-01
    • 2015-07-29
    • 2010-10-07
    相关资源
    最近更新 更多