【threejs】计算矩阵、网格等总面积

核心思路

将面分为无数个三角面 ,使用向量计算面积

/**
* data [
* [  [x,y,z],[x,y,z],[x,y,z],[x,y,z],  ],
*  [  [x,y,z],[x,y,z],[x,y,z],[x,y,z],  ],
* [  [x,y,z],[x,y,z],[x,y,z],[x,y,z],  ],
* .......
* ]
*/
// 计算表面积
const calculateFaceArea = (data) => {
    let area = 0
    let max_i = data.length
    let max_j = data[0].length
    for (let i = 1; i < max_i; i++) {
        for (let j = 1; j < max_j; j++) {
            let p = data[i][j]
            let p1 = data[i][j - 1]
            let p2 = data[i - 1][j - 1]
            let p3 = data[i - 1][j]
            if (p && p1 && p2) {
                let a1 = getTriangleArea(...p, ...p1, ...p2)
                area += a1
            }
            if (p && p2 && p3) {
                let a1 = getTriangleArea(...p, ...p2, ...p3)
                area += a1
            }
        }
    }

    return area
}
// 计算三角面面积
const getTriangleArea = (x1, y1, z1, x2, y2, z2, x3, y3, z3) => {
    var v1 = [x1 - x2, y1 - y2, z1 - z2];
    var v2 = [x1 - x3, y1 - y3, z1 - z3];

    var crossProduct = [
        v1[1] * v2[2] - v1[2] * v2[1],
        v1[2] * v2[0] - v1[0] * v2[2],
        v1[0] * v2[1] - v1[1] * v2[0]
    ];

    var area = 0.5 * Math.sqrt(
        crossProduct[0] * crossProduct[0] +
        crossProduct[1] * crossProduct[1] +
        crossProduct[2] * crossProduct[2]
    );

    return area;
}

相关推荐

  1. threejs计算矩阵网格总面积

    2024-03-30 06:58:06       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 06:58:06       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 06:58:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 06:58:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 06:58:06       18 阅读

热门阅读

  1. spark DataFrame通过JDBC读写数据库(MySQL示例)

    2024-03-30 06:58:06       15 阅读
  2. npm包发布

    2024-03-30 06:58:06       18 阅读
  3. Node.js常用命令详解

    2024-03-30 06:58:06       15 阅读
  4. 在axios中设置方法防止http重复请求

    2024-03-30 06:58:06       17 阅读
  5. SqlSugar快速入门

    2024-03-30 06:58:06       16 阅读
  6. qt之windows库编译

    2024-03-30 06:58:06       20 阅读
  7. MYSQL分区

    2024-03-30 06:58:06       16 阅读
  8. 关于debian如何使用lb-build构建iso

    2024-03-30 06:58:06       17 阅读
  9. 开源 | 星星充电、特来电和云快充如何赚钱?

    2024-03-30 06:58:06       45 阅读