-
Notifications
You must be signed in to change notification settings - Fork 6
/
rangesearch_var_radius.m
63 lines (55 loc) · 1.62 KB
/
rangesearch_var_radius.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
%-------------------------------------------------------------------------------
% rangesearch_var_radius: 'rangesearch' for varying distances (radii)
%
% Syntax: nx_range = rangesearch_var_radius(x, idx, d)
%
% Inputs:
% x - vector of data points (length-N array)
% idx - sequence of indices of the data points from x (length-N array)
% d - vector of distances (length-N array)
%
% Outputs:
% nx_range - number of samples within distance d(n) for x(idx(n)),
% for n=1,2,...,N (length-N array)
%
% Example:
% % define dummy variables:
% N = 1000;
% x = randn(1, N);
% d = abs(randn(1, N)) + 0.1;
%
% % return the number of samples within the radius d:
% nx_range = rangesearch_var_radius(x, 1:N, d);
%
%
% John M. O' Toole, University College Cork
% Started: 09-08-2020
%
% last update: Time-stamp: <2020-08-12 15:33:42 (otoolej)>
%-------------------------------------------------------------------------------
function nx_range = rangesearch_var_radius(x, idx, d)
N = length(x);
nx_range = zeros(1, N);
for n = 1:N
nx_range(n) = rangesearch_1point(x, idx(n), d(n), N);
end
function p = rangesearch_1point(x, ix0, d, N)
%---------------------------------------------------------------------
% how many points within (less than) the distance d for point x(ix0)
%---------------------------------------------------------------------
x0 = x(ix0);
p = 0;
for n = (ix0 + 1):N
if(abs(x(n) - x0) >= d)
break;
else
p = p + 1;
end
end
for n = (ix0 - 1):-1:1
if(abs(x(n) - x0) >= d)
break;
else
p = p + 1;
end
end