2つの3d点ともう1つの3d点のリストが与えられたら、どの点が半径rの2点間の3d線として定義されている円柱の中にあるかチェックします。 私は遅すぎる正確ではないこれは、そのための数値のソリューションを実装しました:3D点が円柱の中にあるかどうかをチェックする方法
def point_in_cylinder(pt1, pt2, points, r, N=100):
dist = np.linalg.norm(pt1 - pt2)
ori = (pt2 - pt1)/dist
line = np.array([pt1 + ori*t for t in np.linspace(0, dist, N)])
dists = np.min(cdist(line, points), 0)
return np.where(dists <= r)[0]
私はそのためのよりよい解決策があると確信している...
*****編集*****
私はこの機能を高速化行列の乗算と(行が宣言されている)listcompを置き換えることにより、少し:
line = (pt1.reshape(3, 1) + elc_ori.reshape(3, 1) @ np.linspace(0, dist, N).reshape(1, N)).T
グレート示して!ありがとう! –