Rename class BoundingBox2 to Rectangle

This commit is contained in:
Stefan Müller 2025-09-25 19:11:18 +02:00
parent 263e215f41
commit 3bea3f5a9b
5 changed files with 21 additions and 21 deletions

View File

@ -8,6 +8,6 @@ namespace SpatialCollections
float BoundingRadius { get; }
BoundingBox2 BoundingBox { get; }
Rectangle BoundingBox { get; }
}
}

View File

@ -37,7 +37,7 @@ namespace SpatialCollections
/// </summary>
private readonly List<QuadtreeItem<IWorldObject>> _items;
private BoundingBox2 _rootBoundingBox;
private Rectangle _rootBoundingBox;
/// <summary>
/// The maximum bounding radius of all stored objects, used to inflate the bounding box for queries.
@ -60,7 +60,7 @@ namespace SpatialCollections
_maxTreeDepth = maxTreeDepth;
_vertices = new List<QuadtreeVertex>() { new(-1, 0) };
_items = new List<QuadtreeItem<IWorldObject>>();
_rootBoundingBox = new BoundingBox2(Vector2.Zero, Vector2.Zero);
_rootBoundingBox = new Rectangle(Vector2.Zero, Vector2.Zero);
_maxObjectRadius = 0f;
_queryStack = new Stack<QuadtreeQuery>();
_vertexStack = new Stack<int>();
@ -92,7 +92,7 @@ namespace SpatialCollections
ExpandRoot(obj.Position);
}
(int leafIndex, int depth, BoundingBox2 bounds) = FindLeaf(0, _rootBoundingBox, 0, obj.Position);
(int leafIndex, int depth, Rectangle bounds) = FindLeaf(0, _rootBoundingBox, 0, obj.Position);
while (_vertices[leafIndex].ChildCount >= _maxLeafSize && depth < _maxTreeDepth)
{
// Splits the vertex and decends into one of the new leaves.
@ -142,9 +142,9 @@ namespace SpatialCollections
return false;
}
public void Query(BoundingBox2 box, List<IWorldObject> resultList)
public void Query(Rectangle box, List<IWorldObject> resultList)
{
BoundingBox2 inflatedBox = box;
Rectangle inflatedBox = box;
inflatedBox.Expand(_maxObjectRadius);
QueryProcessChildVertex(inflatedBox, box, 0, _rootBoundingBox, resultList, _queryStack);
@ -154,7 +154,7 @@ namespace SpatialCollections
QuadtreeQuery query = _queryStack.Pop();
int childIndex = _vertices[query.VertexIndex].FirstChildIndex;
BoundingBox2 halfBounds = new(query.VertexBounds.Center, query.VertexBounds.Max);
Rectangle halfBounds = new(query.VertexBounds.Center, query.VertexBounds.Max);
Vector2 halfSize = halfBounds.Size;
QueryProcessChildVertex(inflatedBox, box, childIndex++, halfBounds, resultList, _queryStack);
@ -174,7 +174,7 @@ namespace SpatialCollections
_vertices.Clear();
_vertices.Add(new QuadtreeVertex(-1, 0));
_items.Clear();
_rootBoundingBox = new BoundingBox2(Vector2.Zero, Vector2.Zero);
_rootBoundingBox = new Rectangle(Vector2.Zero, Vector2.Zero);
_maxObjectRadius = 0f;
}
@ -255,7 +255,7 @@ namespace SpatialCollections
_items[itemIndex] = new QuadtreeItem<IWorldObject>(_items[itemIndex].WorldObject, next);
}
private void SplitLeaf(int leafIndex, BoundingBox2 leafBounds)
private void SplitLeaf(int leafIndex, Rectangle leafBounds)
{
// Splits the leaf vertex by turning it into a branch and adding four new leaves.
var oldLeaf = _vertices[leafIndex];
@ -291,7 +291,7 @@ namespace SpatialCollections
return vertexIndex;
}
private (int leafIndex, int depth, BoundingBox2 bounds) FindLeaf(int vertexIndex, BoundingBox2 bounds,
private (int leafIndex, int depth, Rectangle bounds) FindLeaf(int vertexIndex, Rectangle bounds,
int depth, Vector2 position)
{
while (_vertices[vertexIndex].ChildCount == -1)
@ -321,8 +321,8 @@ namespace SpatialCollections
return (vertexIndex, depth, bounds);
}
private void QueryProcessChildVertex(BoundingBox2 inflatedBox, BoundingBox2 box, int vertexIndex,
BoundingBox2 vertexBounds, List<IWorldObject> resultList, Stack<QuadtreeQuery> stack)
private void QueryProcessChildVertex(Rectangle inflatedBox, Rectangle box, int vertexIndex,
Rectangle vertexBounds, List<IWorldObject> resultList, Stack<QuadtreeQuery> stack)
{
switch (inflatedBox.Intersects(vertexBounds))
{
@ -353,7 +353,7 @@ namespace SpatialCollections
}
}
private void QueryAppendContainedItems(int vertexIndex, BoundingBox2 box, List<IWorldObject> resultList)
private void QueryAppendContainedItems(int vertexIndex, Rectangle box, List<IWorldObject> resultList)
{
_vertexStack.Push(vertexIndex);
@ -377,7 +377,7 @@ namespace SpatialCollections
}
}
private void QueryAppendContainedLeafItems(int vertexIndex, BoundingBox2 box, List<IWorldObject> resultList)
private void QueryAppendContainedLeafItems(int vertexIndex, Rectangle box, List<IWorldObject> resultList)
{
int index = _vertices[vertexIndex].FirstChildIndex;
while (index != -1)

View File

@ -4,9 +4,9 @@
{
public int VertexIndex;
public BoundingBox2 VertexBounds;
public Rectangle VertexBounds;
public QuadtreeQuery(int vertexIndex, BoundingBox2 vertexBounds)
public QuadtreeQuery(int vertexIndex, Rectangle vertexBounds)
{
VertexIndex = vertexIndex;
VertexBounds = vertexBounds;

View File

@ -4,7 +4,7 @@ namespace SpatialCollections
{
public enum IntersectionType { Contains, Intersects, Disjoint }
public class BoundingBox2
public class Rectangle
{
/// <summary>
/// Vector containing the lowest X and Y coordinates contained in the bounding box.
@ -20,7 +20,7 @@ namespace SpatialCollections
public Vector2 Size => Max - Min;
public BoundingBox2(Vector2 min, Vector2 max)
public Rectangle(Vector2 min, Vector2 max)
{
Min = min;
Max = max;
@ -31,7 +31,7 @@ namespace SpatialCollections
return Min.X <= position.X && position.X <= Max.X && Min.Y <= position.Y && position.Y <= Max.Y;
}
public IntersectionType Intersects(BoundingBox2 other)
public IntersectionType Intersects(Rectangle other)
{
if (Min.X <= other.Min.X && other.Max.X <= Max.X && Min.Y <= other.Min.Y && other.Max.Y <= Max.Y)
{

View File

@ -12,7 +12,7 @@ namespace QuadtreeTests
public float BoundingRadius { get; } = 1.0f;
public BoundingBox2 BoundingBox { get; } = new BoundingBox2(position - Vector2.One, position + Vector2.One);
public Rectangle BoundingBox { get; } = new Rectangle(position - Vector2.One, position + Vector2.One);
}
private List<Vector2> _positions;
@ -58,7 +58,7 @@ namespace QuadtreeTests
{
AddObjectsAndAssertCount();
List<IWorldObject> result = new();
_quadtree.Query(new BoundingBox2(new Vector2(3.5f, 3.5f), new Vector2(10.0f, 10.0f)), result);
_quadtree.Query(new Rectangle(new Vector2(3.5f, 3.5f), new Vector2(10.0f, 10.0f)), result);
Assert.That(result.Count, Is.EqualTo(2));
}