我有一个由三角形组成的表面的 3D 闭合网格汽车对象。我想计算它的体积、体积中心和惯性张量。
你可以帮帮我吗
问候。乔治
对于音量...
对于每个三角形面,查找其角点。叫他们P,Q,R。
计算这个数量(我称之为“部分体积”)
pv = PxQyRz + PyQzRx + PzQxRy - PxQzRy - PyQxRz - PzQyRx
将所有方面的这些加在一起并除以 6。
重要的!从外部看,每个刻面的 P、Q、R 必须按顺时针方向排列。(或者全部逆时针,只要它在所有方面都是一致的。)
如果网格有任何四边形,只需暂时幻化连接一对对角的对角线。这使它成为两个三角形。
实际计算改进:在使用 P、Q 和 R 进行数学运算之前,减去某个“中心”点 C 的坐标。这可以是质心、最小/最大 x、y 和 z 之间的中点,或任何方便的点在网格内部或附近。这有助于最大限度地减少截断错误,从而获得更准确的卷。
从数值的角度来看,您要实现的目标非常简单,可以简化为计算几个正交。维基百科将提供有关其背后数学的所需信息。
如果您正在寻找开箱即用的体积计算,请查看此条目。至于惯性——形状是不够的,因为你还需要质量分布。
好吧,这里提供的关于汽车的信息并不多——你应该能够把汽车分解成更简单的形状——你需要的近似程度越高——你可以把它分解成越简单的形状。(如果汽车以某种方式动态生成并且每次都完全不同,这可能会很困难......但我认为这种情况没有任何意义)。
这应该有助于找到各种简单形状的惯性张量:http ://www.gamedev.net/community/forums/topic.asp?topic_id=57001 ,找到球体和立方体之类的体积和类似的东西是很常见的知识,所以我不会打扰链接。
我认为是阿基米德发现,如果你将汽车浸入一定体积的液体中,排出的液体将与汽车具有相同的体积。
不过,我不确定在这种情况下这会对您有什么帮助。在后台运行液体模拟并将网格浸入其中听起来有点过头了。虽然,我认为它确实有效,因此有资格作为(尽管有点无用)答案。;^)