void addNode(final int nodeA, final int nodeB, final double lat1, final double lon1, final double lat2, final double lon2) { PointEmitter pointEmitter = new PointEmitter() { @Override public void set(double lat, double lon) { long key = keyAlgo.encode(lat, lon); long keyPart = createReverseKey(key); // no need to feed both nodes as we search neighbors in fillIDs addNode(root, nodeA, 0, keyPart, key); } }; if (!distCalc.isCrossBoundary(lon1, lon2)) { BresenhamLine.calcPoints(lat1, lon1, lat2, lon2, pointEmitter, graph.getBounds().minLat, graph.getBounds().minLon, deltaLat, deltaLon); } }
public static void calcPoints(int y1, int x1, int y2, int x2, PointEmitter emitter) { bresenham(y1, x1, y2, x2, emitter); }
BresenhamLine.calcPoints(.3, -.3, -0.2, 0.2, tmpEmitter, minLat, minLon, deltaLat, deltaLon); assertEquals(Arrays.asList(11L, 9L), keys); BresenhamLine.calcPoints(.3, -.1, -0.2, 0.4, tmpEmitter, minLat, minLon, deltaLat, deltaLon); BresenhamLine.calcPoints(.5, -.5, -0.1, 0.9, tmpEmitter, minLat, minLon, deltaLat, deltaLon);
/** * Calls the Bresenham algorithm but make it working for double values */ public static void calcPoints(final double lat1, final double lon1, final double lat2, final double lon2, final PointEmitter emitter, final double offsetLat, final double offsetLon, final double deltaLat, final double deltaLon) { // round to make results of bresenham closer to correct solution int y1 = (int) ((lat1 - offsetLat) / deltaLat); int x1 = (int) ((lon1 - offsetLon) / deltaLon); int y2 = (int) ((lat2 - offsetLat) / deltaLat); int x2 = (int) ((lon2 - offsetLon) / deltaLon); bresenham(y1, x1, y2, x2, new PointEmitter() { @Override public void set(double lat, double lon) { // +.1 to move more near the center of the tile emitter.set((lat + .1) * deltaLat + offsetLat, (lon + .1) * deltaLon + offsetLon); } }); } }
@Test public void testBresenhamLineRightUp() { BresenhamLine.calcPoints(0, 0, 2, 3, emitter); // 0,0, 0,1, 1,1, 1,2, 2,2, 2,3 assertEquals(Helper.createPointList(0, 0, 1, 1, 1, 2, 2, 3), points); }
public static void calcPoints( int y1, int x1, int y2, int x2, PointEmitter emitter ) { bresenham(y1, x1, y2, x2, emitter); }
@Test public void testBresenhamBug() { BresenhamLine.calcPoints(0.5, -0.5, -0.6, 1.6, emitter, -1, -1, 0.75, 1.3); assertEquals(Helper.createPointList(0.575, -0.87, -0.175, 0.43, -0.925, 1.73), points); }
public static void calcPoints(int y1, int x1, int y2, int x2, PointEmitter emitter) { bresenham(y1, x1, y2, x2, emitter); }
@Test public void testBresenhamLineRightDown() { BresenhamLine.calcPoints(3, 1, 0, 3, emitter); // 3,1, 2,1, 1,1, 1,2, 0,2, 0,3 assertEquals(Helper.createPointList(3, 1, 2, 2, 1, 2, 0, 3), points); }
public static void calcPoints(int y1, int x1, int y2, int x2, PointEmitter emitter) { bresenham(y1, x1, y2, x2, emitter); }
@Test public void testBresenhamVertical() { BresenhamLine.calcPoints(-.5, .5, 1, 0.5, emitter, 0, 0, 0.4, 0.6); assertEquals(Helper.createPointList(-0.36, .06, 0.04, 0.06, 0.44, 0.06, 0.84, 0.06), points); }
/** * Calls the Bresenham algorithm but make it working for double values */ public static void calcPoints(final double lat1, final double lon1, final double lat2, final double lon2, final PointEmitter emitter, final double offsetLat, final double offsetLon, final double deltaLat, final double deltaLon) { // round to make results of bresenham closer to correct solution int y1 = (int) ((lat1 - offsetLat) / deltaLat); int x1 = (int) ((lon1 - offsetLon) / deltaLon); int y2 = (int) ((lat2 - offsetLat) / deltaLat); int x2 = (int) ((lon2 - offsetLon) / deltaLon); bresenham(y1, x1, y2, x2, new PointEmitter() { @Override public void set(double lat, double lon) { // +.1 to move more near the center of the tile emitter.set((lat + .1) * deltaLat + offsetLat, (lon + .1) * deltaLon + offsetLon); } }); } }
@Test public void testBresenhamLineLeftDown() { BresenhamLine.calcPoints(5, 2, 0, 0, emitter); // 5,2, 4,2, 3,2, 3,1, 2,1, 1,1, 0,0 assertEquals(Helper.createPointList(5, 2, 4, 2, 3, 1, 2, 1, 1, 0, 0, 0), points); }
/** * Calls the Bresenham algorithm but make it working for double values */ public static void calcPoints(final double lat1, final double lon1, final double lat2, final double lon2, final PointEmitter emitter, final double offsetLat, final double offsetLon, final double deltaLat, final double deltaLon) { // round to make results of bresenham closer to correct solution int y1 = (int) ((lat1 - offsetLat) / deltaLat); int x1 = (int) ((lon1 - offsetLon) / deltaLon); int y2 = (int) ((lat2 - offsetLat) / deltaLat); int x2 = (int) ((lon2 - offsetLon) / deltaLon); bresenham(y1, x1, y2, x2, new PointEmitter() { @Override public void set(double lat, double lon) { // +.1 to move more near the center of the tile emitter.set((lat + .1) * deltaLat + offsetLat, (lon + .1) * deltaLon + offsetLon); } }); } }
@Test public void testBresenhamLineLeftUp() { BresenhamLine.calcPoints(2, 2, 3, 0, emitter); // 2,2, 2,1, 2,0, 3,0 assertEquals(Helper.createPointList(2, 2, 2, 1, 3, 0), points); }
/** * Calls the Bresenham algorithm but make it working for double values */ public static void calcPoints( final double lat1, final double lon1, final double lat2, final double lon2, final PointEmitter emitter, final double offsetLat, final double offsetLon, final double deltaLat, final double deltaLon ) { // round to make results of bresenham closer to correct solution int y1 = (int) ((lat1 - offsetLat) / deltaLat); int x1 = (int) ((lon1 - offsetLon) / deltaLon); int y2 = (int) ((lat2 - offsetLat) / deltaLat); int x2 = (int) ((lon2 - offsetLon) / deltaLon); bresenham(y1, x1, y2, x2, new PointEmitter() { @Override public void set( double lat, double lon ) { // +.1 to move more near the center of the tile emitter.set((lat + .1) * deltaLat + offsetLat, (lon + .1) * deltaLon + offsetLon); } }); } }
@Test public void testBresenhamHorizontal() { BresenhamLine.calcPoints(.5, -.5, .5, 1, emitter, -1, -1, 0.6, 0.4); assertEquals(Helper.createPointList(.26, -.56, .26, -0.16, .26, .24, .26, .64, .26, 1.04), points); }
@Test public void testBresenhamToLeft() { BresenhamLine.calcPoints( 47.57383, 9.61984, 47.57382, 9.61890, emitter, 47, 9, 0.00647, 0.00964); assertEquals(points.toString(), 1, points.getSize()); } }
void addNode(final int nodeA, final int nodeB, final double lat1, final double lon1, final double lat2, final double lon2) { PointEmitter pointEmitter = new PointEmitter() { @Override public void set(double lat, double lon) { long key = keyAlgo.encode(lat, lon); long keyPart = createReverseKey(key); // no need to feed both nodes as we search neighbors in fillIDs addNode(root, nodeA, 0, keyPart, key); } }; if (!distCalc.isCrossBoundary(lon1, lon2)) { BresenhamLine.calcPoints(lat1, lon1, lat2, lon2, pointEmitter, graph.getBounds().minLat, graph.getBounds().minLon, deltaLat, deltaLon); } }
void addNode(final int nodeA, final int nodeB, final double lat1, final double lon1, final double lat2, final double lon2) { PointEmitter pointEmitter = new PointEmitter() { @Override public void set(double lat, double lon) { long key = keyAlgo.encode(lat, lon); long keyPart = createReverseKey(key); // no need to feed both nodes as we search neighbors in fillIDs addNode(root, nodeA, 0, keyPart, key); } }; if (!distCalc.isCrossBoundary(lon1, lon2)) { BresenhamLine.calcPoints(lat1, lon1, lat2, lon2, pointEmitter, graph.getBounds().minLat, graph.getBounds().minLon, deltaLat, deltaLon); } }