pyvista.PolyDataFilters.multi_ray_trace#

PolyDataFilters.multi_ray_trace(origins, directions, first_point=False, retry=False)[ソース]#

複数のレイトレース計算を実行します.

これには,3角形の面のみを持つメッシュ,原点の配列と,それに沿ってトレースする等しいサイズの方向ベクトルの配列が必要です.

レイトレースのベクトル化に使用されるembreeライブラリは,VTK実装が交差点を返すであろう交差点を返さないことが時々知られている.結果の一部の交点が欠落しているように見える場合は, retry=True を設定し, PolyDataFilters.ray_trace() を使用して,交点を返さないレイに対して2番目のパスを実行します.

パラメータ:
originsarray_like[float]

各トレースの開始点.

directionsarray_like[float]

各トレースの方向ベクトル.

first_pointbool, default: False

最初のポイントの交差のみを返します.

retrybool, default: False

PolyDataFilters.ray_trace() を使用して交差を返さない光線を再試行します.

戻り値:
intersection_pointsnumpy.ndarray

交点の位置.交差がない場合は空の配列.

intersection_raysnumpy.ndarray

各交差ポイントの光線のインデックス.交差がない場合は空の配列.

intersection_cellsnumpy.ndarray

交差セルのインデックス.交差がない場合は空の配列.

原点からの方向 [1, 0, 0], [0, 1, 0][0, 0, 1] の光線と,原点を中心とする半径0.5の球との交差を計算します.

>>> import pyvista as pv  
>>> sphere = pv.Sphere()  
>>> points, rays, cells = sphere.multi_ray_trace(
...     [[0, 0, 0]] * 3,
...     [[1, 0, 0], [0, 1, 0], [0, 0, 1]],
...     first_point=True,
... )  
>>> string = ", ".join(
...     [
...         f"({point[0]:.3f}, {point[1]:.3f}, {point[2]:.3f})"
...         for point in points
...     ]
... )  
>>> f'Rays intersected at {string}'  
'Rays intersected at (0.499, 0.000, 0.000), (0.000, 0.497, 0.000), (0.000, 0.000, 0.500)'