<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Segoe UI";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma",sans-serif;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Segoe UI",sans-serif;}
p.Textedebulles, li.Textedebulles, div.Textedebulles
        {mso-style-name:"Texte de bulles";
        mso-style-link:"Texte de bulles Car";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.TextedebullesCar
        {mso-style-name:"Texte de bulles Car";
        mso-style-priority:99;
        mso-style-link:"Texte de bulles";
        font-family:"Tahoma",sans-serif;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:black;}
span.EmailStyle24
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">The problem you are facing is with the precision of floating point numbers. The way you are setting up your problem is that the points are exactly 0.01 units away from each other. When you ask the point locator
 for all points within a radius of 0.01, then what happens when a point is exactly 0.01 units away from the center? That depends on what happens in the limited precision of your computer’s floating point values. Sometimes it will be 0.01 + epsilon, in which
 case the point will be considered inside the radius. Sometimes it will be 0.01 – epsilon, in which case the point will be considered outside the radius. This is a well known issue with floating point numbers. There are lots of resources describing it. A quick
 Google search gave this article: <a href="https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html">
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html</a>.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Anyway, the simple solution is to increase the radius in FindPointsWithinRadius by a small amount. Changing the line to:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New";color:#1F497D">    loc.FindPointsWithinRadius(0.01,xp,id_list)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">fixes the problem for all point locators.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">BTW, although perhaps convenient, using a point locator to find neighbors is not the most robust way to do it. It would be safer to use the find neighbor facilities of the different vtkDataSet classes.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">-Ken<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> ParaView [mailto:paraview-bounces@paraview.org]
<b>On Behalf Of </b>Bertrand Gazanion<br>
<b>Sent:</b> Thursday, June 23, 2016 8:13 AM<br>
<b>To:</b> paraview@paraview.org<br>
<b>Subject:</b> [EXTERNAL] Re: [Paraview] Find points within radius<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:black">Forgot the pictures... Sorry for the spam.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black">Bertrand<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif">De :</span></b><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif"> Bertrand Gazanion [<a href="mailto:b.gazanion@gantha.com">mailto:b.gazanion@gantha.com</a>]
<br>
<b>Envoyé :</b> jeudi 23 juin 2016 16:11<br>
<b>À :</b> 'paraview@paraview.org</span><span lang="FR" style="font-size:10.0pt;font-family:"Tahoma",sans-serif">'<br>
<b>Objet :</b> Find points within radius<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span lang="FR"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><i><span style="font-family:"Helvetica",sans-serif;color:black">On behalf of a colleague of mine working with ParaView 4.3.1<o:p></o:p></span></i></p>
<p class="MsoNormal" style="background:white"><span style="font-family:"Helvetica",sans-serif;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-family:"Helvetica",sans-serif;color:black">Hello,<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-family:"Helvetica",sans-serif;color:black"><br>
I am using an algorithm doing calculation on points and their neighbours and I find the results of those points locators to be strange. To test it I made a simple algorithm counting how many neighbours each point has.<br id="yui_3_16_0_ym19_1_1466689264692_2872">
When I create a plane and set its x and y resolution to 100 each, all points should have the same number of neighbours except on the sides. However vtkPointLocator, vtkKdTreePointLocator and vtkOctreePointLocator do not find the same number of neighbours for
 each point.<br id="yui_3_16_0_ym19_1_1466689264692_2873">
<br id="yui_3_16_0_ym19_1_1466689264692_2874">
Here is the algorithm that I use to get the number of neighbors each points has :<br id="yui_3_16_0_ym19_1_1466689264692_2875">
</span><span style="font-size:10.0pt;font-family:"Helvetica",sans-serif;color:black">import vtk<br id="yui_3_16_0_ym19_1_1466689264692_2876">
<br id="yui_3_16_0_ym19_1_1466689264692_2877">
pdi = self.GetInputDataObject(0,0)<br id="yui_3_16_0_ym19_1_1466689264692_2878">
nb_pts = pdi.GetNumberOfPoints()<br id="yui_3_16_0_ym19_1_1466689264692_2879">
<br id="yui_3_16_0_ym19_1_1466689264692_2880">
# Point locator<br id="yui_3_16_0_ym19_1_1466689264692_2881">
loc = vtk.vtkPointLocator()<br id="yui_3_16_0_ym19_1_1466689264692_2882">
#loc = vtk.vtkOctreePointLocator()<br id="yui_3_16_0_ym19_1_1466689264692_2883">
#loc = vtk. vtkKdTreePointLocator()<br id="yui_3_16_0_ym19_1_1466689264692_2884">
<br id="yui_3_16_0_ym19_1_1466689264692_2885">
loc.SetDataSet(pdi)<br id="yui_3_16_0_ym19_1_1466689264692_2886">
loc.BuildLocator()<br id="yui_3_16_0_ym19_1_1466689264692_2887">
<br id="yui_3_16_0_ym19_1_1466689264692_2888">
pts = pdi.GetPoints()<br id="yui_3_16_0_ym19_1_1466689264692_2889">
<br id="yui_3_16_0_ym19_1_1466689264692_2890">
neighbours = vtk.vtkTypeInt64Array()<br id="yui_3_16_0_ym19_1_1466689264692_2891">
neighbours.SetNumberOfComponents(1)<br id="yui_3_16_0_ym19_1_1466689264692_2892">
neighbours.SetNumberOfTuples(nb_pts)<br id="yui_3_16_0_ym19_1_1466689264692_2893">
neighbours.SetName('neighbours')<br id="yui_3_16_0_ym19_1_1466689264692_2894">
<br id="yui_3_16_0_ym19_1_1466689264692_2895">
for k in range(nb_pts):<br id="yui_3_16_0_ym19_1_1466689264692_2896">
<br id="yui_3_16_0_ym19_1_1466689264692_2897">
    xp = pdi.GetPoint(k)<br id="yui_3_16_0_ym19_1_1466689264692_2898">
<br id="yui_3_16_0_ym19_1_1466689264692_2899">
    id_list = vtk.vtkIdList()<br id="yui_3_16_0_ym19_1_1466689264692_2900">
<br id="yui_3_16_0_ym19_1_1466689264692_2901">
    loc.FindPointsWithinRadius(0.01,xp,id_list)<br id="yui_3_16_0_ym19_1_1466689264692_2902">
    loc.Update()<br id="yui_3_16_0_ym19_1_1466689264692_2903">
<br id="yui_3_16_0_ym19_1_1466689264692_2904">
    N = id_list.GetNumberOfIds()<br id="yui_3_16_0_ym19_1_1466689264692_2905">
    neighbours.InsertTuple1(k,N)<br id="yui_3_16_0_ym19_1_1466689264692_2906">
<br id="yui_3_16_0_ym19_1_1466689264692_2907">
<br id="yui_3_16_0_ym19_1_1466689264692_2908">
self.GetOutput().GetPointData().AddArray(neighbours)</span><span style="font-family:"Helvetica",sans-serif;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-family:"Helvetica",sans-serif;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-family:"Helvetica",sans-serif;color:black">You will find attached sample picture describing the result I get with each point locator.<br>
<br id="yui_3_16_0_ym19_1_1466689264692_2911">
thank you very much<o:p></o:p></span></p>
</div>
</body>
</html>