fullseye

mesh_volume — 3D mesh_process op

使い方

閉じた三角形メッシュが囲む符号付き体積 → 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。

背景知識ガイド(この op の手前にある物理・規約)

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(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 operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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