diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 574de4568e21706c1ac832f7025a60df46d8ae69..7ddfc9ed476345b09db3e8fdf464a62bb2ccfa9b 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -8,6 +8,5 @@ </component> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> - <mapping directory="$PROJECT_DIR$/idatt2003" vcs="Git" /> </component> </project> \ No newline at end of file diff --git a/src/main/java/edu/ntnu/stud/chaosgame/controller/game/Quadtree.java b/src/main/java/edu/ntnu/stud/chaosgame/controller/game/Quadtree.java new file mode 100644 index 0000000000000000000000000000000000000000..32915e43675e4d141cd806ceb5f0f8e4eb3e7a71 --- /dev/null +++ b/src/main/java/edu/ntnu/stud/chaosgame/controller/game/Quadtree.java @@ -0,0 +1,34 @@ +package edu.ntnu.stud.chaosgame.controller.game; + +import javafx.geometry.Point2D; +import javafx.scene.shape.Rectangle; + +public class Quadtree { + private QuadtreeNode root; + + public Quadtree(Rectangle bounds) { + root = new QuadtreeNode(bounds, 0); + } + + public QuadtreeNode findNodeContainingPoint(Point2D point) { + return findNodeContainingPoint(root, point); + } + + private QuadtreeNode findNodeContainingPoint(QuadtreeNode node, Point2D point) { + if (node.isLeaf()) { + return node; + } + + for (QuadtreeNode child : node.getChildren()) { + if (child.getBounds().contains(point)) { + return findNodeContainingPoint(child, point); + } + } + + return null; + } + + + + // other methods omitted for brevity +} diff --git a/src/main/java/edu/ntnu/stud/chaosgame/controller/game/QuadtreeNode.java b/src/main/java/edu/ntnu/stud/chaosgame/controller/game/QuadtreeNode.java new file mode 100644 index 0000000000000000000000000000000000000000..9e220a0a8f67cb8fce4ba7182743cd508bcaa043 --- /dev/null +++ b/src/main/java/edu/ntnu/stud/chaosgame/controller/game/QuadtreeNode.java @@ -0,0 +1,60 @@ +package edu.ntnu.stud.chaosgame.controller.game; + +import javafx.scene.shape.Rectangle; + +public class QuadtreeNode { + private QuadtreeNode parent; + private QuadtreeNode[] children; + private boolean isLeaf; + private int levelOfDetail; + private Rectangle bounds; + + public QuadtreeNode(Rectangle bounds, int levelOfDetail) { + this.bounds = bounds; + this.levelOfDetail = levelOfDetail; + this.isLeaf = true; + this.children = new QuadtreeNode[4]; + } + + public void split() { + if (!isLeaf) { + return; + } + + double halfWidth = bounds.getWidth() / 2; + double halfHeight = bounds.getHeight() / 2; + + children[0] = new QuadtreeNode(new Rectangle(bounds.getX(), bounds.getY(), halfWidth, halfHeight), levelOfDetail + 1); + children[1] = new QuadtreeNode(new Rectangle(bounds.getX() + halfWidth, bounds.getY(), halfWidth, halfHeight), levelOfDetail + 1); + children[2] = new QuadtreeNode(new Rectangle(bounds.getX(), bounds.getY() + halfHeight, halfWidth, halfHeight), levelOfDetail + 1); + children[3] = new QuadtreeNode(new Rectangle(bounds.getX() + halfWidth, bounds.getY() + halfHeight, halfWidth, halfHeight), levelOfDetail + 1); + + isLeaf = false; + } + + public void merge() { + if (isLeaf) { + return; + } + + for (int i = 0; i < 4; i++) { + children[i] = null; + } + + isLeaf = true; + } + + public Rectangle getBounds() { + return this.bounds; + } + + public QuadtreeNode[] getChildren() { + return this.children; + } + + public Boolean isLeaf() { + return this.isLeaf; + } + + // getters and setters omitted for brevity +}