pyvista.DataSet.find_closest_cell#

DataSet.find_closest_cell(point: ndarray[Any, dtype[number]] | Sequence[int | float] | Sequence[ndarray[Any, dtype[number]] | Sequence[int | float]], return_closest_point: bool = False) int | ndarray | Tuple[int | ndarray, ndarray][ソース]#

このメッシュ内の指定したポイントに最も近いセルのインデックスを検索します.

パラメータ:
pointVector | Matrix

照会する点の座標(長さ3),または形状 (n, 3)n 点の numpy.ndarray 配列です.

return_closest_pointbool, default: False

True の場合,メッシュセル内でその点に最も近い点を返します. これは必ずしもメッシュ上の最も近いノーダルポイントであるとは限りません. デフォルトは False です.

戻り値:
int or numpy.ndarray

指定した点(複数可)に最も近い,このメッシュ内のセルのインデックスです.

バージョン 0.35.0 で変更: (1, 3) 形式の入力は (1,) 形式の numpy.ndarray を返すようになりました.

numpy.ndarray

与えられた点(複数可)に最も近い,メッシュのセル内にある点です. これは return_closest_point=True の場合にのみ返されます.

バージョン 0.35.0 で変更: (1, 3) の形状の入力は,同じ形状の numpy.ndarray を返すようになりました.

警告

このメソッドは,ポイントに numpy.infnumpy.nan といった値が含まれていても,有効なセルインデックスを返すことがあります.

原点を中心とした球面上で,点 [0.1, 0.2, 0.3] に最も近いセルを探します.

>>> import pyvista as pv
>>> mesh = pv.Sphere()
>>> point = [0.1, 0.2, 0.3]
>>> index = mesh.find_closest_cell(point)
>>> index
338

このセルが実際に [0.1, 0.2, 0.3] に最も近いことを確認してください.

>>> import numpy as np
>>> cell_centers = mesh.cell_centers()
>>> relative_position = cell_centers.points - point
>>> distance = np.linalg.norm(relative_position, axis=1)
>>> np.argmin(distance)
338

原点を中心としたいくつかのランダムな点に最も近いセルを求めます.

>>> points = 2 * np.random.random((5000, 3)) - 1
>>> indices = mesh.find_closest_cell(points)
>>> indices.shape
(5000,)

最も近いセルについて,与えられた点に最も近いセル内の点を求めよ. 長方形は単位正方形で,1つのセルと,法線 zz=0 の平面上の角にある4つの節点からなる. セル内の最も近い点は,通常,節点にはない.

>>> unit_square = pv.Rectangle()
>>> index, closest_point = unit_square.find_closest_cell(
...     [0.25, 0.25, 0.5], return_closest_point=True
... )
>>> closest_point
array([0.25, 0.25, 0.  ])

しかし,最も近い点は,その点のインデックスを返さないが,ノーダル点であることができる. もしインデックスに最も近いノーダルポイントを取得したい場合は, DataSet.find_closest_point() を参照してください.

>>> index, closest_point = unit_square.find_closest_cell(
...     [1.0, 1.0, 0.5], return_closest_point=True
... )
>>> closest_point
array([1., 1., 0.])