From 4e81f4b3cd4335e57bf4a4e42fbcec5ffed3ade1 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <e12119052@student.tuwien.ac.at>
Date: Thu, 9 Jun 2022 14:40:49 +0200
Subject: [PATCH] =?UTF-8?q?=C3=9Cbungstest=207?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/Octree.java     | 26 ++++++++++++++++++++++++++
 src/Simulation.java |  1 +
 2 files changed, 27 insertions(+)

diff --git a/src/Octree.java b/src/Octree.java
index fe0988c..6cd7107 100644
--- a/src/Octree.java
+++ b/src/Octree.java
@@ -51,6 +51,12 @@ public class Octree {
         if (root == null) return;
         root.draw(cd);
     }
+
+    public int getNumberOfBalancedRegions() {
+        if (root == null || !(root instanceof OctreeNode r)) return 0;
+
+        return r.getNumberOfBalancedRegions();
+    }
 }
 
 abstract class OctreeItem {
@@ -149,6 +155,26 @@ class OctreeNode extends OctreeItem {
                 ((octNum & 4) != 0) ? -1 : 1)
                 .times(this.size / 4));
     }
+
+    private boolean isBalanced() {
+        for (OctreeItem i : children) {
+            if (!(i instanceof OctreeLeaf))
+                return false;
+        }
+        return true;
+    }
+
+    protected int getNumberOfBalancedRegions() {
+        if (isBalanced()) return 1;
+
+        int c = 0;
+        for (OctreeItem i : children) {
+            if (i instanceof OctreeNode n) {
+                c += n.getNumberOfBalancedRegions();
+            }
+        }
+        return c;
+    }
 }
 
 class OctreeLeaf extends OctreeItem {
diff --git a/src/Simulation.java b/src/Simulation.java
index f426880..8edac04 100644
--- a/src/Simulation.java
+++ b/src/Simulation.java
@@ -55,6 +55,7 @@ public class Simulation {
             for (Body body : bodies) {
                 octree.add(body);
             }
+            System.out.println(octree.getNumberOfBalancedRegions());
             octree.applyForces(bodies, 100);
 
             if ((seconds % 60) == 0) {