示例#1
0
文件: Octree.cs 项目: Magikos/Octree
        public virtual bool Intersects(IOctreeBoundingVolume volume)
        {
            var box = volume as BoundingBox;

            if (box != null)
            {
                return(Intersects(box));
            }

            var sphere = volume as BoundingSphere;

            return(sphere != null && Intersects(sphere));
        }
示例#2
0
文件: Octree.cs 项目: Magikos/Octree
    public IEnumerable <IOctreePoint> Query(IOctreeBoundingVolume volume)
    {
        if (!volume.Intersects(_boundary))
        {
            yield break;
        }
        foreach (var point in _points)
        {
            if (volume.Contains(point))
            {
                yield return(point);
            }
        }

        if (!IsDivided)
        {
            yield break;
        }
        foreach (var point in NorthEastBack.Query(volume))
        {
            yield return(point);
        }
        foreach (var point in NorthWestBack.Query(volume))
        {
            yield return(point);
        }
        foreach (var point in SouthEastBack.Query(volume))
        {
            yield return(point);
        }
        foreach (var point in SouthWestBack.Query(volume))
        {
            yield return(point);
        }
        foreach (var point in NorthEastFront.Query(volume))
        {
            yield return(point);
        }
        foreach (var point in NorthWestFront.Query(volume))
        {
            yield return(point);
        }
        foreach (var point in SouthEastFront.Query(volume))
        {
            yield return(point);
        }
        foreach (var point in SouthWestFront.Query(volume))
        {
            yield return(point);
        }
    }
示例#3
0
文件: Octree.cs 项目: Magikos/Octree
        public virtual bool Intersects(IOctreeBoundingVolume volume)
        {
            var box = volume as BoundingBox;

            return(box != null && Intersects(box));
        }