diff --git a/src/Octree.java b/src/Octree.java index 6003091..229105e 100644 --- a/src/Octree.java +++ b/src/Octree.java @@ -55,8 +55,8 @@ public class Octree { } abstract class OctreeItem { - protected Vector center; - protected double size; + protected final Vector center; + protected final double size; protected Body pseudoBody; @@ -76,10 +76,14 @@ abstract class OctreeItem { class OctreeNode extends OctreeItem { private final OctreeItem[] children; + private final Vector p1; + private final Vector p2 ; protected OctreeNode(Vector center, double size) { super(center, size); children = new OctreeItem[8]; + p1 = center.plus(new Vector(size / 2)); + p2 = center.minus(new Vector(size / 2)); } @Override @@ -106,7 +110,7 @@ class OctreeNode extends OctreeItem { Vector massCenter = new Vector(); for (OctreeItem oct : children) { if (oct == null) continue; - massCenter = massCenter.plus(oct.pseudoBody.massCenter().times(oct.pseudoBody.mass() / mass)); + massCenter.add(oct.pseudoBody.massCenter().times(oct.pseudoBody.mass() / mass)); } this.pseudoBody = new Body(mass, massCenter); } @@ -122,7 +126,7 @@ class OctreeNode extends OctreeItem { Vector force = new Vector(); for (OctreeItem child : children) { if (child == null) continue; - force = force.plus(child.getForcesOnBody(body, t)); + force.add(child.getForcesOnBody(body, t)); } return force; } @@ -133,10 +137,12 @@ class OctreeNode extends OctreeItem { if (child == null) continue; child.draw(cd); } + /* Vector p1 = center.minus(new Vector(size / 2)); Vector p2 = new Vector(size).minus(new Vector(Simulation.SECTION_SIZE / 2)); cd.setColor(Color.CYAN); cd.drawRectangle(p1.getScreenX(cd), p1.getScreenY(cd), p2.getScreenX(cd), p2.getScreenY(cd)); + */ } private int getOctantNum(Vector bodyPos) { @@ -146,8 +152,6 @@ class OctreeNode extends OctreeItem { } private boolean isInOctant(Vector pos) { - Vector p1 = center.plus(new Vector(size / 2)); - Vector p2 = center.minus(new Vector(size / 2)); return pos.getX() <= p1.getX() && pos.getY() <= p1.getY() && pos.getZ() <= p1.getZ() && pos.getX() >= p2.getX() && pos.getY() >= p2.getY() && pos.getZ() >= p2.getZ(); } diff --git a/src/Vector.java b/src/Vector.java index 71fa038..ccc21df 100644 --- a/src/Vector.java +++ b/src/Vector.java @@ -45,6 +45,12 @@ public class Vector { return new Vector(x + v.x, y + v.y, z + v.z); } + public void add(Vector v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + } + /** * Returns the product of this vector and 'd'. */