You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Three.js 开发中如何计算两个平面几何体之间的夹角

Three.js 计算两个平面几何体夹角方案

核心原理

两个平面的夹角本质等于它们法向量的夹角(或对应补角,一般取0~π/2范围内的最小夹角作为最终结果),所以只需要先提取两个平面几何体的法向量,再计算向量夹角即可得到目标值α。

具体实现步骤

  • 第一步:提取平面世界坐标系下的法向量
    Three.js内置的PlaneGeometry默认法向量沿局部坐标系z轴正方向,需要先转换为世界坐标系下的单位法向量:
    // 封装获取平面网格世界法向量的工具函数
    function getPlaneWorldNormal(planeMesh) {
      // 平面默认局部法向量
      const localNormal = new THREE.Vector3(0, 0, 1);
      // 应用世界矩阵得到世界坐标系下的法向量
      localNormal.applyMatrix4(planeMesh.matrixWorld);
      // 归一化处理
      localNormal.normalize();
      return localNormal;
    }
    
  • 第二步:计算法向量夹角
    直接调用Three.js向量内置的angleTo方法即可得到弧度制夹角:
    // 先更新两个平面的世界矩阵,确保变换参数生效
    planeMesh1.updateMatrixWorld(true);
    planeMesh2.updateMatrixWorld(true);
    const normal1 = getPlaneWorldNormal(planeMesh1);
    const normal2 = getPlaneWorldNormal(planeMesh2);
    let alpha = normal1.angleTo(normal2);
    
  • 第三步:标准化夹角取值范围
    为了符合通用的平面夹角定义(取两个平面形成的最小夹角),对计算结果做范围校准:
    // 取最小夹角,范围固定在0~π/2
    alpha = Math.min(alpha, Math.PI - alpha);
    // 如需转换为角度单位,做如下换算
    const alphaDegree = alpha * 180 / Math.PI;
    

如果你的平面几何体有自定义的顶点修改,不是默认的平面朝向,需要先从几何体属性中读取对应法向量,再做世界坐标系转换即可。

内容的提问来源于stack exchange,提问作者Michele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:27:03