public Leaf(Leaf leaf, int dim, double splitValue) : this() { for (int i = Bspt.leafCount; --i >= 0;) { Bspt.Tuple tuple = leaf.tuples[i]; double value_Renamed = tuple.getDimValue(dim); if (value_Renamed > splitValue || (value_Renamed == splitValue && ((i & 1) == 1))) { leaf.tuples[i] = null; tuples[count++] = tuple; } } int dest = 0; for (int src = 0; src < Bspt.leafCount; ++src) { if (leaf.tuples[src] != null) { leaf.tuples[dest++] = leaf.tuples[src]; } } leaf.count = dest; if (count == 0) { tuples[Bspt.leafCount] = null; // explode } }
private bool isWithin(Bspt.Tuple t) { double dist2; double distT; distT = t.getDimValue(0) - centerValues[0]; if (tHemisphere && distT < 0) { return(false); } dist2 = distT * distT; if (dist2 > distance2) { return(false); } for (int dim = bspt.dimMax; --dim > 0;) { distT = t.getDimValue(dim) - centerValues[dim]; dist2 += distT * distT; if (dist2 > distance2) { return(false); } } this.foundDistance2_Renamed_Field = dist2; return(true); }
public EnumerateNear(Bspt bspt, Bspt.Tuple center, double distance) { this.distance = distance; this.center = center; stack = new Node[Bspt.stackDepth]; sp = 0; Bspt.Element ele = bspt.eleRoot; while (ele is Node) { Node node = (Node)ele; if (center.getDimValue(node.dim) - distance <= node.splitValue) { if (sp == Bspt.stackDepth) { System.Console.Out.WriteLine("Bspt.EnumerateNear tree stack overflow"); } stack[sp++] = node; ele = node.eleLE; } else { ele = node.eleGE; } } leaf = (Leaf)ele; i = 0; }
public EnumerateSphere(Bspt bspt, Bspt.Tuple center, double distance, bool tHemisphere) { this.bspt = bspt; this.distance = distance; this.distance2 = distance * distance; this.center = center; this.tHemisphere = tHemisphere; centerValues = new double[bspt.dimMax]; for (int dim = bspt.dimMax; --dim >= 0;) { centerValues[dim] = center.getDimValue(dim); } stack = new Node[Bspt.stackDepth]; sp = 0; Bspt.Element ele = bspt.eleRoot; while (ele is Node) { Node node = (Node)ele; if (center.getDimValue(node.dim) - distance <= node.splitValue) { if (sp == Bspt.stackDepth) { System.Console.Out.WriteLine("Bspt.EnumerateSphere tree stack overflow"); } stack[sp++] = node; ele = node.eleLE; } else { ele = node.eleGE; } } leaf = (Leaf)ele; i = 0; }
public bool addTuple(Bspt.Tuple tuple) { if (count == Bspt.leafCount) { return(false); } tuples[count++] = tuple; return(true); }
public void addTuple(Bspt.Tuple tuple) { if (!eleRoot.addTuple(tuple)) { eleRoot = new Node(0, dimMax, (Leaf)eleRoot); if (!eleRoot.addTuple(tuple)) { System.Console.Out.WriteLine("Bspt.addTuple() failed"); } } }
public bool addTuple(Bspt.Tuple tuple) { if (tuple.getDimValue(dim) < splitValue) { if (eleLE.addTuple(tuple)) { return(true); } eleLE = new Node((dim + 1) % dimMax, dimMax, (Leaf)eleLE); return(eleLE.addTuple(tuple)); } if (tuple.getDimValue(dim) > splitValue) { if (eleGE.addTuple(tuple)) { return(true); } eleGE = new Node((dim + 1) % dimMax, dimMax, (Leaf)eleGE); return(eleGE.addTuple(tuple)); } if (eleLE.LeafWithSpace) { eleLE.addTuple(tuple); } else if (eleGE.LeafWithSpace) { eleGE.addTuple(tuple); } else if (eleLE is Node) { eleLE.addTuple(tuple); } else if (eleGE is Node) { eleGE.addTuple(tuple); } else { eleLE = new Node((dim + 1) % dimMax, dimMax, (Leaf)eleLE); return(eleLE.addTuple(tuple)); } return(true); }
public EnumerateSphere enumHemiSphere(Bspt.Tuple center, double distance) { return(new EnumerateSphere(this, center, distance, true)); }
public IEnumerator enumNear(Bspt.Tuple center, double distance) { return(new EnumerateNear(this, center, distance)); }
public EnumerateSphere(Bspt bspt, Bspt.Tuple center, double distance, bool tHemisphere) { this.bspt = bspt; this.distance = distance; this.distance2 = distance * distance; this.center = center; this.tHemisphere = tHemisphere; centerValues = new double[bspt.dimMax]; for (int dim = bspt.dimMax; --dim >= 0; ) centerValues[dim] = center.getDimValue(dim); stack = new Node[Bspt.stackDepth]; sp = 0; Bspt.Element ele = bspt.eleRoot; while (ele is Node) { Node node = (Node)ele; if (center.getDimValue(node.dim) - distance <= node.splitValue) { if (sp == Bspt.stackDepth) System.Console.Out.WriteLine("Bspt.EnumerateSphere tree stack overflow"); stack[sp++] = node; ele = node.eleLE; } else { ele = node.eleGE; } } leaf = (Leaf)ele; i = 0; }
public EnumerateNear(Bspt bspt, Bspt.Tuple center, double distance) { this.distance = distance; this.center = center; stack = new Node[Bspt.stackDepth]; sp = 0; Bspt.Element ele = bspt.eleRoot; while (ele is Node) { Node node = (Node)ele; if (center.getDimValue(node.dim) - distance <= node.splitValue) { if (sp == Bspt.stackDepth) System.Console.Out.WriteLine("Bspt.EnumerateNear tree stack overflow"); stack[sp++] = node; ele = node.eleLE; } else { ele = node.eleGE; } } leaf = (Leaf)ele; i = 0; }