From c6a96ae710bde7417232d303d0eafb513f994814 Mon Sep 17 00:00:00 2001 From: Morippi Date: Wed, 7 Jul 2021 19:44:10 +0200 Subject: [PATCH] Fixed QuadTreeImage --- .../lod/objects/quadTree/LodQuadTree.java | 26 ++++++++++-- .../lod/objects/quadTree/QuadTreeImage.java | 40 ++++++++++--------- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java index ef5c8e149..285768478 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/LodQuadTree.java @@ -333,12 +333,12 @@ public class LodQuadTree { * @return */ public List> getLevelToGenerate(int x, int z, byte targetLevel, int maxDistance, int minDistance) { - int distance = (int) Math.sqrt(Math.pow(x + lodNodeData.centerX, 2) + Math.pow(z + lodNodeData.centerZ, 2)); + int distance = (int) Math.sqrt(Math.pow(x - lodNodeData.centerX, 2) + Math.pow(z - lodNodeData.centerZ, 2)); List> nodeList = new ArrayList<>(); - if (distance > maxDistance || distance < minDistance || targetLevel > lodNodeData.level || lodNodeData.real) { + if (distance > maxDistance || distance < minDistance || targetLevel > lodNodeData.level) { return nodeList; } - if(isThereAnyChild()) { + if(isNodeFull()) { //THIS LEVEL HAS CHILD SO IT'S GENERATED. if (targetLevel != lodNodeData.level) { for (int NS = 0; NS <= 1; NS++) { @@ -353,6 +353,23 @@ public class LodQuadTree { } } else { nodeList.add(new AbstractMap.SimpleEntry<>(this, distance)); + /* + if(isThereAnyChild()){ + for (int NS = 0; NS <= 1; NS++) { + for (int WE = 0; WE <= 1; WE++) { + if (children[NS][WE] == null) { + setChild(NS,WE); + LodQuadTree child = children[NS][WE]; + distance = (int) Math.sqrt(Math.pow(x - child.lodNodeData.centerX, 2) + Math.pow(z - child.lodNodeData.centerZ, 2)); + nodeList.add(new AbstractMap.SimpleEntry<>(child, distance)); + } + } + } + }else{ + nodeList.add(new AbstractMap.SimpleEntry<>(this, distance)); + } + + */ } return nodeList; } @@ -400,6 +417,8 @@ public class LodQuadTree { public String toString(){ String s = lodNodeData.toString(); + return s; + /* if(isThereAnyChild()){ for (int NS = 0; NS <= 1; NS++) { for (int WE = 0; WE <= 1; WE++) { @@ -411,5 +430,6 @@ public class LodQuadTree { } } return s; + */ } } \ No newline at end of file diff --git a/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java b/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java index ac21dc5e3..0c1785854 100644 --- a/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java +++ b/src/main/java/com/seibel/lod/objects/quadTree/QuadTreeImage.java @@ -65,8 +65,9 @@ public class QuadTreeImage extends JPanel { private static void createAndShowGui( ) { LodQuadTree lodQuadTree = new LodQuadTree(0,0); - for(int i = 0; i<9; i++){ - List> levelToGenerate= lodQuadTree.getLevelToGenerate(0,0,(byte) (9-i),1000,0); + + for(int i = 0; i<6; i++){ + List> levelToGenerate= lodQuadTree.getLevelToGenerate(0,0,(byte) (7),350,0); boolean bw= true; System.out.println(levelToGenerate); for(AbstractMap.SimpleEntry levelDist : levelToGenerate){ @@ -80,25 +81,28 @@ public class QuadTreeImage extends JPanel { bw = true; } - int posZ = level.getLodNodeData().startX/LodNodeData.BLOCK_WIDTH; - int posX = level.getLodNodeData().startZ/LodNodeData.BLOCK_WIDTH; - System.out.println(posX + " " + posZ); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(LodNodeData.BLOCK_LEVEL, posX, posZ, 0, 0, color,true),true); + int startX = level.getLodNodeData().startX; + int startZ = level.getLodNodeData().startZ; + int endX = level.getLodNodeData().endX; + int endZ = level.getLodNodeData().endZ; + int width = level.getLodNodeData().width; + byte otherLevel = LodNodeData.BLOCK_LEVEL; + int otherWidth = LodNodeData.BLOCK_WIDTH; + int posZ = 2*startX/otherWidth; + int posX = 2*startZ/otherWidth; + lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color,true),true); - posZ = level.getLodNodeData().endX/LodNodeData.BLOCK_WIDTH; - posX = level.getLodNodeData().startZ/LodNodeData.BLOCK_WIDTH; - System.out.println(posX + " " + posZ); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(LodNodeData.BLOCK_LEVEL, posX, posZ, 0, 0, color,true),true); + posZ = 2*endX/otherWidth; + posX = 2*startZ/otherWidth; + lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color,true),true); - posZ = level.getLodNodeData().startX/LodNodeData.BLOCK_WIDTH; - posX = level.getLodNodeData().endX/LodNodeData.BLOCK_WIDTH; - System.out.println(posX + " " + posZ); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(LodNodeData.BLOCK_LEVEL, posX, posZ, 0, 0, color,true),true); + posZ = 2*startX/otherWidth; + posX = 2*endZ/otherWidth; + lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color,true),true); - posZ = level.getLodNodeData().endX/LodNodeData.BLOCK_WIDTH; - posX = level.getLodNodeData().endZ/LodNodeData.BLOCK_WIDTH; - System.out.println(posX + " " + posZ); - lodQuadTree.setNodeAtLowerLevel(new LodNodeData(LodNodeData.BLOCK_LEVEL, posX, posZ, 0, 0, color,true),true); + posZ = 2*endX/otherWidth; + posX = 2*endZ/otherWidth; + lodQuadTree.setNodeAtLowerLevel(new LodNodeData(otherLevel, posX, posZ, 0, 0, color,true),true); } } System.out.println(lodQuadTree.getNodeList(false,false,false));