mesh_volume — 3D mesh_process op

数据种类:meshmeasurement

调用: import fullseye as fs; fs.ledger.mesh_volume(mesh) -> 'float'(要直接调用实现,import mesh_props; mesh_props.mesh_volume(mesh) -> 'float';从台账取用则 ops3d.get("mesh_volume"))

用法

> 该算子的说明尚无译文,以下照原文给出。

閉じた三角形メッシュが囲む符号付き体積 → float。

発散定理(divergence theorem)で `V = (1/6)·Σ v0 · (v1 × v2)`。面の巻き順が外向き

(右手系)なら正、内向きなら負になる —— 符号は向きの検査そのもので、負が

返ったら法線が裏返っている。

Args:

mesh: `(vertices (N,3), faces (M,3))` のタプル。

Returns:

符号付き体積(float、座標の単位の 3 乗)。

Raises:

ValueError: `mesh(vertices, faces)` の 2 要素でない、形状不正、

非有限座標、非整数・範囲外の index、空のとき。

★**voxel_to_mesh(marching cubes)の返りは内向き巻きなので、そのまま渡すと

負になる**(実測: 1000 voxel の立方体で -985.67)。「負 = 法線が裏返っている」

のは正しいが、この組み合わせでは裏返っているのが既定なので、体積が欲しい

だけなら `abs() を取るか faces[:, ::-1]` で巻き直すこと。向きの検査に

使うのは、巻き順を自分で決めた(または向きを揃えた)メッシュに対して。

限界(honest): 発散定理は閉じた曲面でのみ成り立つ。開いたメッシュ

(穴のあるスキャン)に対しても数値は返るが、それは「穴を原点へ向かって

塞いだ立体の体積」であって、欲しい量ではない。閉じているかどうかは

:func:boundary_vertices が空か、`mesh_edge_statsboundary_edges` が

0 かで先に確かめること。自己交差があるメッシュでは重なった領域が

符号つきで二重に数えられる(これも定理どおりの挙動で、検出はしない)。

Reference (public): 発散定理による多面体体積は標準的な公式。例えば

C. Zhang & T. Chen, "Efficient feature extraction for 2D/3D objects in mesh

representation", ICIP 2001。

背景知识指南(该算子背后的物理与约定)

blender_interop — Blender との併用 — 形を作って fullseye で測る(軸・単位・正解データの罠)

参考(示例数据・文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

可运行的示例(实际调用该算子并已验证的样例)

hull_boundspy -3.11 examples_3d/hull_bounds.py

mesh_propspy -3.11 examples_3d/mesh_props.py

类型可衔接的下一个算子(可接受 measurement 作为输入)

vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle

同类别(mesh_process)

laplacian_smooth · taubin_smooth · decimate_qem · face_normals · vertex_normals · mesh_area · vertex_curvature · face_areas


*Provenance: mesh_props.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.