From bafb7d353de4d94a66155fa645e900466c10a10e Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Fri, 28 May 2021 22:44:45 +0530 Subject: [PATCH] removed narrowphase --- src/octreenarrowphase/IOctreeNode.hx | 7 -- src/octreenarrowphase/Octree.hx | 84 -------------- src/octreenarrowphase/OctreeNode.hx | 168 --------------------------- src/octreenarrowphase/OctreePoint.hx | 21 ---- 4 files changed, 280 deletions(-) delete mode 100644 src/octreenarrowphase/IOctreeNode.hx delete mode 100644 src/octreenarrowphase/Octree.hx delete mode 100644 src/octreenarrowphase/OctreeNode.hx delete mode 100644 src/octreenarrowphase/OctreePoint.hx diff --git a/src/octreenarrowphase/IOctreeNode.hx b/src/octreenarrowphase/IOctreeNode.hx deleted file mode 100644 index e97967e6..00000000 --- a/src/octreenarrowphase/IOctreeNode.hx +++ /dev/null @@ -1,7 +0,0 @@ -package octreenarrowphase; - -import polygonal.ds.Prioritizable; - -interface IOctreeNode extends Prioritizable { - function getNodeType():Int; -} diff --git a/src/octreenarrowphase/Octree.hx b/src/octreenarrowphase/Octree.hx deleted file mode 100644 index d690ee1e..00000000 --- a/src/octreenarrowphase/Octree.hx +++ /dev/null @@ -1,84 +0,0 @@ -package octreenarrowphase; - -import polygonal.ds.PriorityQueue; -import dif.math.Box3F; -import dif.math.Point3F; - -class Octree { - var root:OctreeNode; - - public function new(pts:Array>, binPoints:Int = 8) { - var pos = pts; - - var min = new Point3F(); - var max = new Point3F(); - - // Generate the bounding box - for (index => op in pos) { - var p = op.point; - if (p.x < min.x) - min.x = p.x; - if (p.y < min.y) - min.y = p.y; - if (p.z < min.z) - min.z = p.z; - - if (p.x > max.x) - max.x = p.x; - if (p.y > max.y) - max.y = p.y; - if (p.z > max.z) - max.z = p.z; - } - - root = new OctreeNode(); - root.box = new Box3F(min.x, min.y, min.z, max.x, max.y, max.z); - - // We use the insert method because its much faster doing this way - for (index => pt in pts) - root.insert(pt.point, pt.value); - } - - public function find(pt:Point3F) - return root.find(pt); - - public function remove(pt:Point3F) - return root.remove(pt); - - public function insert(pt:Point3F, value:T) - return root.insert(pt, value); - - public function knn(point:Point3F, number:Int) { - var queue = new PriorityQueue>(); - root.priority = cast(-root.box.getClosestPoint(point).sub(point).lengthSq()); - queue.enqueue(root); - - var l = new Array>(); - - while (l.length < number && queue.size > 0) { - var node = queue.dequeue(); - - switch (node.getNodeType()) { - case 1: - var leaf:OctreeNode = cast node; - for (index => pt in leaf.points) { - pt.priority = cast(-pt.point.sub(point).lengthSq()); - queue.enqueue(pt); - } - - case 0: - var pt:OctreePoint = cast node; - l.push(pt); - - case 2: - var n:OctreeNode = cast node; - for (subnode in n.nodes) { - subnode.priority = cast(-subnode.box.getClosestPoint(point).sub(point).lengthSq()); - queue.enqueue(subnode); - } - } - } - - return l; - } -} diff --git a/src/octreenarrowphase/OctreeNode.hx b/src/octreenarrowphase/OctreeNode.hx deleted file mode 100644 index 284eb983..00000000 --- a/src/octreenarrowphase/OctreeNode.hx +++ /dev/null @@ -1,168 +0,0 @@ -package octreenarrowphase; - -import dif.math.Box3F; -import dif.math.Point3F; - -class OctreeNode implements IOctreeNode { - public var nodes:Array>; - - public var priority:Int; - public var position:Int; - - var isLeaf:Bool; - - public var points:Array>; - - var center:Point3F; - - public var box:Box3F; - - public function new() { - this.isLeaf = true; - this.points = new Array>(); - } - - public function getCount() { - if (this.isLeaf) { - return this.points.length; - } else { - var res = 0; - for (index => value in nodes) { - res += value.getCount(); - } - return res; - } - } - - function getIsEmpty() { - if (this.isLeaf) - return this.getCount() == 0; - else { - for (index => value in nodes) { - if (!value.getIsEmpty()) - return false; - } - return true; - } - } - - public function find(pt:Point3F) { - if (this.isLeaf) { - for (index => value in this.points) { - if (value.point.equal(pt)) - return true; - } - return true; - } else { - var msk = 0; - msk |= (pt.x - center.x) < 0 ? 1 : 0; - msk |= (pt.y - center.y) < 0 ? 2 : 0; - msk |= (pt.z - center.z) < 0 ? 4 : 0; - - return nodes[msk].find(pt); - } - } - - public function remove(pt:Point3F) { - if (this.isLeaf) { - var found = false; - var idx = -1; - for (index => value in this.points) { - if (value.point.equal(pt)) { - found = true; - idx = index; - break; - } - } - if (found) { - return this.points.remove(this.points[idx]); - } else - return false; - } else { - var msk = 0; - msk |= (pt.x - center.x) < 0 ? 1 : 0; - msk |= (pt.y - center.y) < 0 ? 2 : 0; - msk |= (pt.z - center.z) < 0 ? 4 : 0; - - var ret = nodes[msk].remove(pt); - this.merge(); - return ret; - } - } - - public function insert(pt:Point3F, value:T) { - if (this.isLeaf) { - this.points.push(new OctreePoint(pt, value)); - subdivide(); - } else { - var msk = 0; - msk |= (pt.x - center.x) < 0 ? 1 : 0; - msk |= (pt.y - center.y) < 0 ? 2 : 0; - msk |= (pt.z - center.z) < 0 ? 4 : 0; - nodes[msk].insert(pt, value); - } - } - - function subdivide(binPoints:Int = 8) { - var min = new Point3F(box.minX, box.minY, box.minZ); - var max = new Point3F(box.maxX, box.maxY, box.maxZ); - center = min.add(max).scalarDiv(2); - - if (points.length > binPoints) { - isLeaf = false; - - var size = max.sub(min); - - nodes = new Array>(); - for (i in 0...8) { - nodes.push(new OctreeNode()); - } - - nodes[0].box = new Box3F(center.x, center.y, center.z, max.x, max.y, max.z); - nodes[1].box = new Box3F(center.x - (size.x / 2), center.y, center.z, max.x - (size.x / 2), max.y, max.z); - nodes[2].box = new Box3F(center.x, center.y - (size.y / 2), center.z, max.x, max.y - (size.y / 2), max.z); - nodes[3].box = new Box3F(center.x - (size.x / 2), center.y - (size.y / 2), center.z, max.x - (size.x / 2), max.y - (size.y / 2), max.z); - nodes[4].box = new Box3F(center.x, center.y, center.z - (size.z / 2), max.x, max.y, max.z - (size.z / 2)); - nodes[5].box = new Box3F(center.x - (size.x / 2), center.y, center.z - (size.z / 2), max.x - (size.x / 2), max.y, max.z - (size.z / 2)); - nodes[6].box = new Box3F(center.x, center.y - (size.y / 2), center.z - (size.z / 2), max.x, max.y - (size.y / 2), max.z - (size.z / 2)); - nodes[7].box = new Box3F(min.x, min.y, min.z, max.x, max.y, max.z); - - for (index => pt in points) { - var msk = 0; - msk |= (pt.point.x - center.x) < 0 ? 1 : 0; - msk |= (pt.point.y - center.y) < 0 ? 2 : 0; - msk |= (pt.point.z - center.z) < 0 ? 4 : 0; - - if (!nodes[msk].find(pt.point)) - nodes[msk].points.push(new OctreePoint(pt.point, pt.value)); - } - - points = null; - - for (index => value in nodes) { - value.subdivide(binPoints); - } - } else { - isLeaf = true; - } - } - - function merge() { - if (this.isLeaf) { - return; - } else { - if (this.getIsEmpty()) { - this.isLeaf = true; - this.nodes = null; - this.points = new Array>(); - } - } - } - - public function getNodeType() { - if (this.isLeaf) - return 1; - else - return 2; - } -} diff --git a/src/octreenarrowphase/OctreePoint.hx b/src/octreenarrowphase/OctreePoint.hx deleted file mode 100644 index 6e9da413..00000000 --- a/src/octreenarrowphase/OctreePoint.hx +++ /dev/null @@ -1,21 +0,0 @@ -package octreenarrowphase; - -import dif.math.Point3F; - -class OctreePoint implements IOctreeNode { - public var point:Point3F; - - public var priority:Int; - public var position:Int; - - public var value:T; - - public function new(point:Point3F, value:T) { - this.point = point; - this.value = value; - } - - public function getNodeType() { - return 0; - } -}