public bool Overlaps(KdTreeAxis axis, float splitValue) { return( (axis.IsSplitOnX && Min.X <= splitValue && Max.X >= splitValue) || (axis.IsSplitOnY && Min.Y <= splitValue && Max.Y >= splitValue) || (axis.IsSplitOnZ && Min.Z <= splitValue && Max.Z >= splitValue)); }
public bool Overlaps(KdTreeAxis axis, float splitValue) { return ( (axis.IsSplitOnX && Min.X <= splitValue && Max.X >= splitValue) || (axis.IsSplitOnY && Min.Y <= splitValue && Max.Y >= splitValue) || (axis.IsSplitOnZ && Min.Z <= splitValue && Max.Z >= splitValue)); }
public bool RightOf(KdTreeAxis axis, float splitValue) { return (Overlaps(axis, splitValue) || ( (axis.IsSplitOnX && Min.X > splitValue) || (axis.IsSplitOnY && Min.Y > splitValue) || (axis.IsSplitOnZ && Min.Z > splitValue) )); }
public bool LeftOf(KdTreeAxis axis, float splitValue) { return (Overlaps(axis, splitValue) || ( (axis.IsSplitOnX && Max.X < splitValue) || (axis.IsSplitOnY && Max.Y < splitValue) || (axis.IsSplitOnZ && Max.Z < splitValue)) ); }
public bool RightOf(KdTreeAxis axis, float splitValue) { return(Overlaps(axis, splitValue) || ( (axis.IsSplitOnX && Min.X > splitValue) || (axis.IsSplitOnY && Min.Y > splitValue) || (axis.IsSplitOnZ && Min.Z > splitValue) )); }
public bool LeftOf(KdTreeAxis axis, float splitValue) { return(Overlaps(axis, splitValue) || ( (axis.IsSplitOnX && Max.X < splitValue) || (axis.IsSplitOnY && Max.Y < splitValue) || (axis.IsSplitOnZ && Max.Z < splitValue)) ); }
public KdTreeNode(Vector3 min, Vector3 max, KdTreeAxis useAxis, List <RTGeometry> list) { mLeft = null; mRight = null; mGeomList = null; mBounds = new BoundingBox(min, max); mSplitAxis = new KdTreeAxis(useAxis); ComputeSplitPosition(list); }
public KdTreeNode(Vector3 min, Vector3 max, KdTreeAxis useAxis, List<RTGeometry> list) { mLeft = null; mRight = null; mGeomList = null; mBounds = new BoundingBox(min, max); mSplitAxis = new KdTreeAxis(useAxis); ComputeSplitPosition(list); }
public void BuildKDTree(KdTreeNode node, int depth, List <RTGeometry> geomList) { if (MetStopCriteria(node, depth, geomList.Count)) { node.SetGeomList(geomList); return; } List <RTGeometry> leftList = new List <RTGeometry>(); List <RTGeometry> rightList = new List <RTGeometry>(); foreach (RTGeometry g in geomList) { if (g.LeftOf(node.SplitAxis, node.SplitPosition)) { leftList.Add(g); } if (g.RightOf(node.SplitAxis, node.SplitPosition)) { rightList.Add(g); } } Vector3 leftMin, leftMax, rightMin, rightMax; leftMin = node.Bounds.Min; leftMax = node.Bounds.Max; rightMin = leftMin; rightMax = leftMax; leftMax = node.SplitAxis.SetVectorComponent(leftMax, node.SplitPosition); rightMin = node.SplitAxis.SetVectorComponent(rightMin, node.SplitPosition); KdTreeAxis nextAxis = node.SplitAxis.NextSplitAxis; node.LeftChild = new KdTreeNode(leftMin, leftMax, nextAxis, leftList); node.RightChild = new KdTreeNode(rightMin, rightMax, nextAxis, rightList); BuildKDTree(node.LeftChild, depth + 1, leftList); BuildKDTree(node.RightChild, depth + 1, rightList); }
public KdTreeAxis(KdTreeAxis axis) { mSplitAxis = axis.mSplitAxis; }