GLTree Matlab Example: Radius Search Function

February 15, 2010 by Luigi Giaccari 
Filed under: Computational Geometry, Optimization 
Leave a Comment
VN:F [1.8.8_1072]
Rating: 0 (from 0 votes)
VN:F [1.8.8_1072]
Rating: 0.0/10 (0 votes cast)

Go to main post

RSearch2D query a GL-Tree for Radius search

SYNTAX

idc=RSearch3D(p,qp,ptrtree,r);

INPUT PARAMETERS

  • p: [2xN] double array coordinates of reference points
  • qp: [2x1] double array  coordinates of query points. NOTE: differently from NNsearch this function does not support multiple query points.
  • ptrtree: a pointer to the previously constructed  GLtree.Warning if the pointer is uncorrect it will cause a crash, there is no way to check this in the mex routine, you have to check it in your script.
  • r: double value, radius to perform the search.

OUTPUT PARAMETERS

  • idc: [?x1] column vector, each rows contains an index of a point found in the range described by the radius.

GENERAL INFORMATIONS

-Conditions for a point to be found in the radius is <=, so
points with distance from the query=r will be returned.

For question, suggestion, bug reports
giaccariluigi@msn.com

Author: Luigi Giaccari

EXAMPLE

function test()
 
N=200;%reference points
 
k=3;%k neigh
 
p=rand(N,2);%reference points
 
qp=rand(1,2);%query point
r=.1;%radius for search
 
fprintf('RANDOM POINTS GENERATED\n\n')
 
fprintf('BUILDING THE DATA STRUCTURE:\n')
tic
ptrtree=BuildGLTree2D(p');
fprintf('\tGLTree built in %4.4f s\n\treturned pointer %4.0f:\n\n',toc,ptrtree);
 
fprintf('START RADIUS SEARCH:\n')
tic
[idc]=RSearch2D(p',qp',ptrtree,r);
fprintf('\t %4.0f Points found in range\n\n',length(idc));
 
fprintf('DELETING THE TREE\n\n')
DeleteGLTree2D(ptrtree);
 
fprintf('TEST SUCCESFULLY COMPLETED !!!\n\n')
 
%plot the NNG
 
figure(1)
title([num2str(k),' Neighbours'],'fontsize',14);
axis equal
hold on
h1=plot(p(:,1),p(:,2),'g.');
h2=plot(qp(:,1),qp(:,2),'b+');
h2=circle(qp,r,30,'-b');
h3=plot(p(idc,1),p(idc,2),'r.');
legend([h1,h2,h3],'Reference points','Circle','Inside points');
 
end
 
function H=circle(center,radius,NOP,style)
%---------------------------------------------------------------------------------------------
% H=CIRCLE(CENTER,RADIUS,NOP,STYLE)
% This routine draws a circle with center defined as
% a vector CENTER, radius as a scaler RADIS. NOP is
% the number of points on the circle. As to STYLE,
% use it the same way as you use the rountine PLOT.
% Since the handle of the object is returned, you
% use routine SET to get the best result.
%
%   Usage Examples,
%
%   circle([1,3],3,1000,':');
%   circle([2,4],2,1000,'--');
%
%   Zhenhai Wang <zhenhai@ieee.org>
%   Version 1.00
%   December, 2002
%---------------------------------------------------------------------------------------------
 
if (nargin <3),
 error('Please see help for INPUT DATA.');
elseif (nargin==3)
 style='b-';
end;
THETA=linspace(0,2*pi,NOP);
RHO=ones(1,NOP)*radius;
[X,Y] = pol2cart(THETA,RHO);
X=X+center(1);
Y=Y+center(2);
H=plot(X,Y,style);
axis square;
end

Go to main post

VN:F [1.8.8_1072]
Rating: 0.0/10 (0 votes cast)
VN:F [1.8.8_1072]
Rating: 0 (from 0 votes)

Popularity: 2% [?]

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • Live
  • PDF
  • Technorati
  • Twitter
  • Yahoo! Bookmarks
  • Add to favorites
  • email
  • MySpace
  • RSS

Related Posts

Comments

Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!


Include MATLAB code in your comment by doing the following:

<pre lang="MATLAB">

%insert code here

</pre>