void OnDrawGizmos() { if (!InPlaymode) { return; } Point[] points = new Point[2000]; Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); QuadTree.Rectangle rect = new QuadTree.Rectangle(mousePosition, Vector2.one); QuadTree.Rectangle.Draw(rect); int amount = 0; quadTree.query(rect, ref points, ref amount); QuadTree.Draw(quadTree); Gizmos.color = Color.red; for (int i = 0; i < points.Length; i++) { Gizmos.DrawCube(points[i].position, Vector2.one * 0.1f); } print("quadtree points: " + points.Length); points = new Point[2000]; amount = 0; quadTree.query(quadTree.boundary, ref points, ref amount); print("mouse rect points" + points.Length); }
// Use this for initialization void Start() { rect = new QuadTree.Rectangle(-4, 0, 0.5f, 0.5f); GeneratePoints(); QuadTree.Rectangle r = new QuadTree.Rectangle(0, 0, 5, 5); tree = new QuadTree(r, quadtreequality); for (int i = 0; i < points.Count; i++) { Point p = new Point(i, points[i]); tree.insert(p); } }
void Start() { InPlaymode = true; Camera cam = Camera.main; Vector2 camPos = cam.transform.position; float height = cam.orthographicSize; float width = cam.aspect * height; Vector2 camSize = new Vector2(width, height); QuadTree.Rectangle rect = new QuadTree.Rectangle(Vector2.zero, camSize); quadTree = new QuadTree(rect, 1); }
public Vector2 GetVector(Vector2 point) { QuadTree.Rectangle rect = new QuadTree.Rectangle(point, new Vector2(distanceBetweenPointsX + 0.01f, distanceBetweenPointsY + 0.01f)); amount = 0; Point[] nearest = quadTree.query(rect, ref amount); int x = -1; float lowest = 1000000; for (int i = 0; i < nearest.Length; i++) { float dist = Vector2.SqrMagnitude(nearest[i].position - point); if (dist < lowest) { lowest = dist; x = i; } } Vector2Int vec = new Vector2Int(nearest[x].index % ySize, nearest[x].index / ySize); return(GenerateVector(nearest[x].index % ySize, nearest[x].index / ySize)); }
void PackQuadTree() { QuadTree.Rectangle rect = new QuadTree.Rectangle(Vector2.zero + offSet, new Vector2(flowfieldSize.x / 2, flowfieldSize.x / 2)); quadTree = new QuadTree(rect, 5); int rows = vectors.GetLength(1); collArr = new Collider2D[5]; int amount = 0; for (int i = 0; i < vectors.GetLength(0); i++) { for (int j = 0; j < vectors.GetLength(1); j++) { // Collider2D col = Physics2D.OverlapPoint(vectors[i, j], wallLayer); // if (col != null) // { Point point = new Point(i + ySize * j, vectors[i, j]); quadTree.insert(point); // } } } }
// boids keep a distance to eachother void Rule2() { int amount = 0; float x = 0; float y = 0; float seperationRect = seperation * 2; for (int i = 0; i < amountOfUnits; i++) { amount = 0; x = units[i].x; y = units[i].y; QuadTree.Rectangle rect = new QuadTree.Rectangle(x, y, seperationRect, seperationRect); Point[] nearby = tree.query(rect, ref amount); for (int j = 0; j < amount; j++) { if (i != nearby[j].index) { units[i].x -= Push(units[i].x, nearby[j].position.x, seperation); units[i].y -= Push(units[i].y, nearby[j].position.y, seperation); } } } }