Skip to content

Commit

Permalink
Refactoring and fix minor bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
TaehoonK committed Jul 31, 2020
1 parent bc4beb7 commit 79e30ee
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 65 deletions.
8 changes: 7 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.1.0</version>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
Expand All @@ -88,6 +88,12 @@
</goals>
</execution>
</executions>
<!-- For mac OS
<configuration>
<source>8</source>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
-->
</plugin>
</plugins>
</build>
Expand Down
27 changes: 2 additions & 25 deletions src/main/java/jp/go/aist/dggs/geometry/ISEA4DFaceCoordinates.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
*
* @author Taehoon Kim
*/
public class ISEA4DFaceCoordinates implements Comparable<ISEA4DFaceCoordinates>{
public class ISEA4DFaceCoordinates {
private final int _res;
private final int _face;
private final long _x;
Expand All @@ -30,7 +30,6 @@ public class ISEA4DFaceCoordinates implements Comparable<ISEA4DFaceCoordinates>{
this._isOrthogonal = isOrthogonal;
}


/**
* @param face Index of rhombuses (= diamond) from 0 to 9
* @param x range is from 0 to 4,294,967,295 (2^32 - 1)
Expand Down Expand Up @@ -139,7 +138,7 @@ public ISEA4DFaceCoordinates toOrthogonal() {
RealMatrix rmx = MATRIX_A_INVERSE.multiply(matrix_B);

long orthogonal_x = Double.valueOf(rmx.getData()[0][0]).longValue();
long orthogonal_y = Double.valueOf(rmx.getData()[1][0] / Math.sqrt(3) * 2).longValue();
long orthogonal_y = Double.valueOf(rmx.getData()[1][0]).longValue();

return new ISEA4DFaceCoordinates(_face, orthogonal_x, orthogonal_y, _z, _res, true);
}
Expand All @@ -164,26 +163,4 @@ public long[] toList() {
public String toString() {
return String.format("res %d face %d x %d y %d z %d", this._res, this._face, this._x, this._y, this._z);
}

@Override
public int compareTo(ISEA4DFaceCoordinates second) {
ISEA4DFaceCoordinates first = this;
if(first._res != second._res) {
if(first._res > second._res) {
first = MortonUtils.toFaceCoordinate(first, second._res);
}
else {
second = MortonUtils.toFaceCoordinate(second, first._res);
}
}

int d;
d = Long.compare(first._x, second._x);
if (d != 0) return d;
d = Long.compare(first._y, second._y);
if (d != 0) return d;
return Long.compare(first._z, second._z);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package jp.go.aist.dggs.geometry;

import jp.go.aist.dggs.common.DGGS;
import jp.go.aist.dggs.utils.MortonUtils;
import org.giscience.utils.geogrid.geometry.FaceCoordinates;
import org.giscience.utils.geogrid.geometry.GeoCoordinates;
import org.giscience.utils.geogrid.projections.ISEAProjection;
import org.junit.Test;

import static jp.go.aist.dggs.common.DGGS.*;
import static org.junit.Assert.*;

public class ISEA4DFaceCoordinatesTest {
private final int _iterations = 1000000;

@Test
public void orthogonal_Random() {
for (int i = 0; i < this._iterations; i++) {
GeoCoordinates c = new GeoCoordinates(Math.random() * 179.99 - 89.995, Math.random() * 360.0 - 180.0, Math.random() * DGGS.H_RANGE * 2 - DGGS.H_RANGE);
ISEA4DFaceCoordinates faceCoordinates = MortonUtils.toFaceCoordinate(c).toOrthogonal();

ISEAProjection p = new ISEAProjection();
FaceCoordinates f = p.sphereToIcosahedron(c);
int face = f.getFace();
double newPointX;
double newPointY;
newPointX = f.getX() - NEW_ORIG_X;
if ((face >= 0 && face <= 4) || (face >= 10 && face <= 14)) {
newPointY = f.getY() - NEW_ORIG_Y;
} else {
newPointY = f.getY() + NEW_ORIG_Y;
}
double origX = newPointX / (-NEW_ORIG_X * 2) * TOTAL_RANGE;
double origY = newPointY / (-NEW_ORIG_X * 2) * TOTAL_RANGE;
double origZ = ((H_RANGE + c.getHeight()) / (H_RANGE * 2)) * TOTAL_RANGE_Z;

assertTrue(Math.abs(faceCoordinates.getX() - Double.valueOf(origX).longValue()) <= 1);
assertTrue(Math.abs(faceCoordinates.getY() - Double.valueOf(origY).longValue()) <= 1);
assertTrue(Math.abs(faceCoordinates.getZ() - Double.valueOf(origZ).longValue()) <= 1);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ public void toLocal_maxX() {
assertEquals(mortonCode, "933333333333333333333333333333333");

LocalFaceCoordinates localFaceCoordinates = faceCoordinates.toLocalize();
assertEquals(localFaceCoordinates.getFace(),"9333333333");
assertEquals(localFaceCoordinates.getX(),0.838861, delta);
assertEquals(localFaceCoordinates.getY(),0,delta);
assertEquals(localFaceCoordinates.getZ(),0,delta);
assertEquals(localFaceCoordinates.getFace(), "9333333333");
assertEquals(localFaceCoordinates.getX(), 0.838861, delta);
assertEquals(localFaceCoordinates.getY(), 0, delta);
assertEquals(localFaceCoordinates.getZ(), 0, delta);
}

@Test
Expand All @@ -26,10 +26,23 @@ public void toLocal_maxY() {
assertEquals(mortonCode, "922222222222222222222222222222222");

LocalFaceCoordinates localFaceCoordinates = faceCoordinates.toLocalize();
assertEquals(localFaceCoordinates.getFace(),"9222222222");
assertEquals(localFaceCoordinates.getX(),0.419430, delta);
assertEquals(localFaceCoordinates.getY(),0.726475,delta);
assertEquals(localFaceCoordinates.getZ(),0,delta);
assertEquals(localFaceCoordinates.getFace(), "9222222222");
assertEquals(localFaceCoordinates.getX(), 0.419430, delta);
assertEquals(localFaceCoordinates.getY(), 0.726475, delta);
assertEquals(localFaceCoordinates.getZ(), 0, delta);
}

@Test
public void toLocal_minY() {
ISEA4DFaceCoordinates faceCoordinates = new ISEA4DFaceCoordinates(9, (long) Math.pow(2,32)-1, 0L, 0L);
String mortonCode = Morton3D.encode(faceCoordinates);
assertEquals(mortonCode, "911111111111111111111111111111111");

LocalFaceCoordinates localFaceCoordinates = faceCoordinates.toLocalize();
assertEquals(localFaceCoordinates.getFace(), "9111111111");
assertEquals(localFaceCoordinates.getX(), 0.419430, delta);
assertEquals(localFaceCoordinates.getY(), -0.726475, delta);
assertEquals(localFaceCoordinates.getZ(), 0, delta);
}

@Test
Expand All @@ -39,9 +52,9 @@ public void toLocal_maxZ() {
assertEquals(mortonCode, "900000000444444444444444444444444");

LocalFaceCoordinates localFaceCoordinates = faceCoordinates.toLocalize();
assertEquals(localFaceCoordinates.getFace(),"9000000004");
assertEquals(localFaceCoordinates.getX(),0, delta);
assertEquals(localFaceCoordinates.getY(),0,delta);
assertEquals(localFaceCoordinates.getZ(),0.838861,delta);
assertEquals(localFaceCoordinates.getFace(), "9000000004");
assertEquals(localFaceCoordinates.getX(), 0, delta);
assertEquals(localFaceCoordinates.getY(), 0, delta);
assertEquals(localFaceCoordinates.getZ(), 0.838861, delta);
}
}
27 changes: 0 additions & 27 deletions src/test/java/jp/go/aist/dggs/utils/MortonUtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,33 +55,6 @@ public void convertToMorton_Random() {
}
}

@Test
public void orthogonal_Random() {
for (int i = 0; i < this._iterations; i++) {
GeoCoordinates c = new GeoCoordinates(Math.random() * 179.99 - 89.995, Math.random() * 360.0 - 180.0, Math.random() * DGGS.H_RANGE * 2 - DGGS.H_RANGE);
ISEA4DFaceCoordinates faceCoordinates = MortonUtils.toFaceCoordinate(c).toOrthogonal();

ISEAProjection p = new ISEAProjection();
FaceCoordinates f = p.sphereToIcosahedron(c);
int face = f.getFace();
double newPointX;
double newPointY;
newPointX = f.getX() - NEW_ORIG_X;
if ((face >= 0 && face <= 4) || (face >= 10 && face <= 14)) {
newPointY = f.getY() - NEW_ORIG_Y;
} else {
newPointY = f.getY() + NEW_ORIG_Y;
}
double origX = newPointX / (-NEW_ORIG_X * 2) * TOTAL_RANGE;
double origY = newPointY / (-NEW_ORIG_X * Math.sqrt(3)) * TOTAL_RANGE;
double origZ = ((H_RANGE + c.getHeight()) / (H_RANGE * 2.0d)) * TOTAL_RANGE_Z;

assertTrue(Math.abs(faceCoordinates.getX() - Double.valueOf(origX).longValue()) <= 1);
assertTrue(Math.abs(faceCoordinates.getY() - Double.valueOf(origY).longValue()) <= 1);
assertTrue(Math.abs(faceCoordinates.getZ() - Double.valueOf(origZ).longValue()) <= 1);
}
}

@Test
public void convertToMorton_resolution() {
GeoCoordinates c = new GeoCoordinates(Math.random() * 179.99 - 89.995, Math.random() * 360.0 - 180.0);
Expand Down

0 comments on commit 79e30ee

Please sign in to comment.