c语言求网格模型的体积,如何计算表面由三角形组成的3D网格物体的体积

实际上是一个非常简单的计算。

诀窍是计算四面体的有符号体积 -根据您的三角形并以原点为起点。体积的符号来自于三角形是否指向原点方向。(三角形的法线本身取决于顶点的顺序,这就是为什么您看不到下面明确引用的三角形的原因。)

这全部归结为以下简单功能:

public float SignedVolumeOfTriangle(Vector p1, Vector p2, Vector p3) {

var v321 = p3.X*p2.Y*p1.Z;

var v231 = p2.X*p3.Y*p1.Z;

var v312 = p3.X*p1.Y*p2.Z;

var v132 = p1.X*p3.Y*p2.Z;

var v213 = p2.X*p1.Y*p3.Z;

var v123 = p1.X*p2.Y*p3.Z;

return (1.0f/6.0f)*(-v321 + v231 + v312 - v132 - v213 + v123);

}

然后是一个驱动程序来计算网格的体积:

public float VolumeOfMesh(Mesh mesh) {

var vols = from t in mesh.Triangles

select SignedVolumeOfTriangle(t.P1, t.P2, t.P3);

return Math.Abs(vols.Sum());

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值