splinepy.spline.Spline.proximities#

Spline.proximities(queries, initial_guess_sample_resolutions=None, tolerance=None, max_iterations=-1, tight_search_bounds=False, nthreads=None, return_verbose=False)[source]#

Given physical coordinate, finds a parametric coordinate that maps to the nearest physical coordinate. Also known as “point inversion”.

Makes initial guess by searching for the nearest points with kd-tree. With initial_guess_sample_resolutions value, physical points will be sampled to plant a kd-tree.

The planted kd-tree is saved in cpp object internally and will re-plant if initial_guess_sample_resolutions are positive. Default behavior is to re-plant the tree each query. If you know that spline doesn’t have any inplace changes, and would like to avoid it, set negative values.

If there’s no tree, this will raise runtime error.

Parameters:
  • queries ((n, dim) array-like)

  • initial_guess_sample_resolutions ((para_dim) array-like) – Default is 2 * control_mesh_resolutions. For complex shapes, we recommend setting large values.

  • tolerance (float) – Convergence criteria. Currently for both distance and residual

  • max_iterations (int) – Default is (para_dim * 20)

  • tight_search_bounds (bool) – Default is False. Set search bound to aabb of direct neighbors from the sample grid.

  • nthreads (int)

  • return_verbose (bool) – If False, returns only parametric coords

Returns:

  • para_coord ((n, para_dim) np.ndarray) – Parametric coordinates

  • phys_coord ((n, dim) np.ndarray) – (only if return_verbose) respective physical coordinates

  • phys_diff ((n, dim) np.ndarray) – (only if return_verbose) respective cartesian difference to query

  • distance ((n, 1) np.ndarray) – (only if return_verbose) respective 2-norm of difference

  • convergence_norm ((n, 1) np.ndarrray) – (only if return_verbose) Newton residual

  • first_derivatives ((n, para_dim, dim) np.ndarray) – (only if return_verbose) Convergence information

  • second_derivatives ((n, para_dim, para_dim, dim) np.ndarray) – (only if return_verbose) Convergence information