Esempio n. 1
0
 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))
          );
 }
Esempio n. 5
0
 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)
            ));
 }
Esempio n. 6
0
 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))
            );
 }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
        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;
 }
 public KdTreeAxis(KdTreeAxis axis)
 {
     mSplitAxis = axis.mSplitAxis;
 }