threejs 计算不规则体的表面积和体积

获取geometry的所有faces顶点,根据顶点去计算表面积和体积

            let Area = 0.0;
			let volumes = 0.0;
			// 计算体积和表面积
			let array = geometry.attributes.position.array
			for (let i = 0; i < array.length; i+=9) {
			// 对应三角形三个顶点
				let V1= new THREE.Vector3(array[i], array[i+1], array[i+2]);
				let V2= new THREE.Vector3(array[i+3], array[i+4], array[i+5]);
				let V3= new THREE.Vector3(array[i+6], array[i+7], array[i+8]);

				// volume 会产生负数..............
				volumes += volumeOfTriangle(V3, V2, V1);
				Area += AreaOfTriangle(V3, V2, V1);
			}
			let SurfaceArea = (Area / 100).toFixed(2);
			console.log('表面积:' + SurfaceArea);
			let loadedObjectVolume = (volumes / 1000).toFixed(2);
			console.log('体积:' + loadedObjectVolume);

体积计算关键代码

function Triangle(p1, p2, p3) {
		return p1.clone().cross(p2).dot(p3) / 6; //p1叉乘p2点乘p3除以6
}

表面积计算关键代码

function AreaOfTriangle(p1, p2, p3) {
		var v1 = new THREE.Vector3();
		var v2 = new THREE.Vector3();
		// 通过两个顶点坐标计算其中两条边构成的向量
		v1 = p1.clone().sub(p2);
		v2 = p1.clone().sub(p3);
		var v3 = new THREE.Vector3();
		// 三角形面积计算
		v3.crossVectors(v1, v2);
		var s = v3.length() / 2;
		return s
}

经过一些3D打印网站展示的模型体积表面积比对,结果验证是对的

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值