public void SolveProximity(Node2Proximity prox) { if (this.m_root == null) { return; } this.m_root.SolveProximity(this.m_list, prox); }
/// <summary>Recursive method that solves a proximity search.</summary> /// <param name="nodes">Node set to search</param> /// <param name="prox">Proximity object to search with</param> public void SolveProximity(Node2List nodes, Node2Proximity prox) { double d0 = default(double); double d1 = default(double); prox.DistanceRange(ref d0, ref d1); double num1 = this.MinimumDistanceSquared(prox.Start.x, prox.Start.y); if (num1 >= d1 || num1 > prox.MaxSearchRadiusSquared || this.MaximumDistanceSquared(prox.Start.x, prox.Start.y) <= prox.MinSearchRadiusSquared) { return; } if (this.m_nodes == null) { Node2Leaf[] node2LeafArray; if (prox.Start.x < this.x_mid) { if (prox.Start.y < this.y_mid) { node2LeafArray = new Node2Leaf[4] { this.m_A, this.m_B, this.m_D, this.m_C } } ; else { node2LeafArray = new Node2Leaf[4] { this.m_D, this.m_A, this.m_C, this.m_B } }; } else if (prox.Start.y < this.y_mid) { node2LeafArray = new Node2Leaf[4] { this.m_B, this.m_A, this.m_C, this.m_D } } ; else { node2LeafArray = new Node2Leaf[4] { this.m_C, this.m_D, this.m_B, this.m_A } }; int num2 = node2LeafArray.Length - 1; for (int index = 0; index <= num2; ++index) { if (node2LeafArray[index] != null) { node2LeafArray[index].SolveProximity(nodes, prox); } } } else { if (this.m_nodes == null) { return; } int num2 = this.m_nodes.Count - 1; for (int index = 0; index <= num2; ++index) { prox.RegisterNode(nodes[this.m_nodes[index]], this.m_nodes[index]); } } }