
shgetnp
Finds the nearest point, or points (in a specified set of points), to a given point in 3-space.
Prototype
function shgetnp ( px [1] : float, py [1] : float, pz [1] : float, x [*] : float, y [*] : float, z [*] : float, flag [1] : integer ) return_val [1] : integer
Arguments
pxA scalar specifying the X coordinate value of a point P whose nearest neighbor (in a specified set of points) is to be found.
pyA scalar specifying the Y coordinate value of a point P whose nearest neighbor (in a specified set of points) is to be found.
pzA scalar specifying the Z coordinate value of a point P whose nearest neighbor (in a specified set of points) is to be found.
xA one-dimensional array containing the X coordinates of the input data points.
yA one-dimensional array, of the same size as x, containing the Y coordinates of the input data points.
zA one-dimensional array, of the same size as x and y, containing the Z coordinates of the input data points.
flagA scalar flag that is 0 for the first call to this function for a given dataset and is 1 otherwise.
Return value
An integer, say np, such that (x(np),y(np),z(np)) is the nearest input data point to P. np = -1 if there is an error. On successive calls to this function after the first (that is, when flag=1) you can find the Mth closest point to (px,py,pz) with the Mth call.
Description
shgetnp is called to find the nearest point, or points (in a specified set of points), to a given point in 3-space. Successive calls to shgetnp determine the point nearest the specified point, excluding the points found in previous calls; i.e., successive calls can be used to find the N nearest points for any N between one and the maximum number of points in the input dataset.
shgetnp is part of the shgrid package in the ngmath library.
Examples
begin ; ; Specify the data points. ; xi = new(64,float) yi = new(64,float) zi = new(64,float) np = new(64,integer) l = 0 do k=1,4 zl = (1.*(k-1))/3. do j=1,4 yl = (1.*(j-1))/3. do i = 1,4 xi(l) = (1.*(i-1))/3. yi(l) = yl zi(l) = zl l = l+1 end do end do end do ; ; Specify a reference point P. ; px = 0.301 py = 0.901 pz = 0.501 ; ; Find the index of the nearest point to P. ; np(0) = shgetnp(px,py,pz,xi,yi,zi,0) ; ; Find the other nearest points to P in sequence. ; do i=1,63 np(i) = shgetnp(px,py,pz,xi,yi,zi,1) end do ; ; Print the indices of the nearest points (xi(np(k)),yi(np(k),zi(np(k))) ; is the kth nearest point to P for k=0,63 ; print(np) end