diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java index 9c1ad8621496fffe49c611a5054fd8533581fa77..9ade7e71c17683bfa463bd41f83df2da288ecc39 100644 --- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java +++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java @@ -113,7 +113,7 @@ public class SymmetryEstimator extends MeshVisitor { BBox bbox = bbVisitor.getBoundingBox(); Vector3d normal = symmetryPlane.getNormal(); - Point3d midPoint = bbox.getMidPoint().getPosition(); + Point3d midPoint = bbox.getMidPoint(); double alpha = -((normal.x * midPoint.x) + (normal.y * midPoint.y) + (normal.z * midPoint.z) + @@ -140,7 +140,7 @@ public class SymmetryEstimator extends MeshVisitor { b.cross(normal,a); b.normalize(); - double scale = (bbox.getMaxPoint().subtractPosition(bbox.getMinPoint())).getPosition().x; + double scale = bbox.getMaxPoint().x - bbox.getMinPoint().x; return createMeshFacet(midPointOnPlane, a, b, symmetryPlane.getNormal(), scale); } diff --git a/Comparison/src/main/java/cz/fidentis/analyst/visitors/mesh/BoundingBox.java b/Comparison/src/main/java/cz/fidentis/analyst/visitors/mesh/BoundingBox.java index f590abc8d169f4b8c393e137acd41d76ed900966..52a56159c03091c9c7e20b01579a9d371a98712e 100644 --- a/Comparison/src/main/java/cz/fidentis/analyst/visitors/mesh/BoundingBox.java +++ b/Comparison/src/main/java/cz/fidentis/analyst/visitors/mesh/BoundingBox.java @@ -3,7 +3,6 @@ package cz.fidentis.analyst.visitors.mesh; import cz.fidentis.analyst.mesh.MeshVisitor; import cz.fidentis.analyst.mesh.core.MeshFacet; import cz.fidentis.analyst.mesh.core.MeshPoint; -import cz.fidentis.analyst.mesh.core.MeshPointImpl; import java.util.List; import javax.vecmath.Point3d; import javax.vecmath.Vector3d; @@ -45,8 +44,8 @@ public class BoundingBox extends MeshVisitor { */ public class BBox { - private MeshPoint maxPoint; - private MeshPoint minPoint; + private Point3d maxPoint; + private Point3d minPoint; /** * Creates bounding box from given mesh points. @@ -59,8 +58,8 @@ public class BoundingBox extends MeshVisitor { throw new IllegalArgumentException("points"); } - minPoint = new MeshPointImpl(new Point3d(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), null, null); - maxPoint = new MeshPointImpl(new Point3d(Double.NEGATIVE_INFINITY,Double.NEGATIVE_INFINITY,Double.NEGATIVE_INFINITY), null, null); + minPoint = new Point3d(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); + maxPoint = new Point3d(Double.NEGATIVE_INFINITY,Double.NEGATIVE_INFINITY,Double.NEGATIVE_INFINITY); compute(points); } @@ -78,13 +77,13 @@ public class BoundingBox extends MeshVisitor { for (int i = 0; i < points.size(); i++) { MeshPoint point = points.get(i); - minPoint.getPosition().x = Math.min(minPoint.getPosition().x, point.getPosition().x); - minPoint.getPosition().y = Math.min(minPoint.getPosition().y, point.getPosition().y); - minPoint.getPosition().z = Math.min(minPoint.getPosition().z, point.getPosition().z); + minPoint.x = Math.min(minPoint.x, point.getPosition().x); + minPoint.y = Math.min(minPoint.y, point.getPosition().y); + minPoint.z = Math.min(minPoint.z, point.getPosition().z); - maxPoint.getPosition().x = Math.max(maxPoint.getPosition().x, point.getPosition().x); - maxPoint.getPosition().y = Math.max(maxPoint.getPosition().y, point.getPosition().y); - maxPoint.getPosition().z = Math.max(maxPoint.getPosition().z, point.getPosition().z); + maxPoint.x = Math.max(maxPoint.x, point.getPosition().x); + maxPoint.y = Math.max(maxPoint.y, point.getPosition().y); + maxPoint.z = Math.max(maxPoint.z, point.getPosition().z); } } @@ -92,7 +91,7 @@ public class BoundingBox extends MeshVisitor { * Return the upper-bound corner of the bounding cube * @return max point of the bounding box */ - public MeshPoint getMaxPoint() { + public Point3d getMaxPoint() { return maxPoint; } @@ -100,15 +99,18 @@ public class BoundingBox extends MeshVisitor { * Return centroid of the bounding cube. * @return middle point of the bounding box */ - public MeshPoint getMidPoint() { - return (minPoint.addPosition(maxPoint)).multiplyPosition(0.5); + public Point3d getMidPoint() { + Point3d p = new Point3d(minPoint); + p.add(maxPoint); + p.scale(0.5); + return p; } /** * Return the lower-bound corner of the bounding cube * @return min point of the bounding box */ - public MeshPoint getMinPoint() { + public Point3d getMinPoint() { return minPoint; } @@ -117,7 +119,9 @@ public class BoundingBox extends MeshVisitor { * @return maximal diagonal of bounding box */ public double getMaxDiag() { - return maxPoint.subtractPosition(minPoint).abs(); + Vector3d v = new Vector3d(maxPoint); + v.sub(minPoint); + return v.length(); } /** diff --git a/Comparison/src/test/java/cz/fidentis/analyst/visitors/mesh/BoundingBoxVisitorTest.java b/Comparison/src/test/java/cz/fidentis/analyst/visitors/mesh/BoundingBoxVisitorTest.java index da9d6696c4ca107af9a076ac685161405b5ee4d1..022c668414ca38fb66ba1e4b382428e1efa8b7d7 100644 --- a/Comparison/src/test/java/cz/fidentis/analyst/visitors/mesh/BoundingBoxVisitorTest.java +++ b/Comparison/src/test/java/cz/fidentis/analyst/visitors/mesh/BoundingBoxVisitorTest.java @@ -23,8 +23,8 @@ public class BoundingBoxVisitorTest { assertNotNull(m); BoundingBox visitor = new BoundingBox(); m.compute(visitor); - assertEquals(new Vector3d(0.8944249749183655, 1.0, 0.8506399989128113), visitor.getBoundingBox().getMaxPoint().getPosition()); - assertEquals(new Vector3d(-0.8944249749183655, -1.0, -0.8506399989128113), visitor.getBoundingBox().getMinPoint().getPosition()); + assertEquals(new Vector3d(0.8944249749183655, 1.0, 0.8506399989128113), visitor.getBoundingBox().getMaxPoint()); + assertEquals(new Vector3d(-0.8944249749183655, -1.0, -0.8506399989128113), visitor.getBoundingBox().getMinPoint()); } @Test @@ -38,7 +38,7 @@ public class BoundingBoxVisitorTest { assertNotNull(m); m.compute(visitor); - assertEquals(new Vector3d(1.0, 1.0, 1.0), visitor.getBoundingBox().getMaxPoint().getPosition()); - assertEquals(new Vector3d(-1.0, -1.0, -1.0), visitor.getBoundingBox().getMinPoint().getPosition()); + assertEquals(new Vector3d(1.0, 1.0, 1.0), visitor.getBoundingBox().getMaxPoint()); + assertEquals(new Vector3d(-1.0, -1.0, -1.0), visitor.getBoundingBox().getMinPoint()); } } diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacetImpl.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacetImpl.java index d6db25b5efbd5fb910760fb0259cf7b85c984742..5e83a7083cd0b19a5d0615799bc1275cfa4fbbf7 100644 --- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacetImpl.java +++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacetImpl.java @@ -250,7 +250,11 @@ public class MeshFacetImpl implements MeshFacet { mapPoints.put(v, new MeshPointImpl(v, n, t)); mapOrigPositions.put(v, new ArrayList<>()); } else if (n != null) { - mapPoints.put(v, mapPoints.get(v).addNormal(n)); + MeshPoint orig = mapPoints.get(v); + Vector3d newNormal = new Vector3d(orig.getNormal()); + newNormal.add(n); + newNormal.normalize(); + mapPoints.put(v, new MeshPointImpl(orig.getPosition(), newNormal, orig.getTexCoord())); } mapOrigPositions.get(v).add(i); } diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java index c3e5a26978b19d03f57e7cdb6ba6024aad0fd14e..e216c5ef4bacbebc949924e83c6de6d64f44820f 100644 --- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java +++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java @@ -39,116 +39,5 @@ public interface MeshPoint extends Serializable { * @return texture coordinates */ Vector3d getTexCoord(); - - /** - * Calculates distance between two mesh points. - * - * @param point The second mesh point - * @return the distance between this and another point - */ - double distanceTo(MeshPoint point); - - /** - * returns new instance of MeshPoint with subtracted position - * - * @param subtrahend position to be subtracted - * @return subtracted MeshPoint - */ - MeshPoint subtractPosition(MeshPoint subtrahend); - - /** - * returns new instance of MeshPoint with subtracted position - * - * @param subtrahend position to be subtracted - * @return subtracted MeshPoint - */ - MeshPoint subtractPosition(Point3d subtrahend); - - /** - * returns new instance of MeshPoint with added position - * - * @param addend position to be added - * @return added MeshPoint - */ - MeshPoint addPosition(MeshPoint addend); - - /** - * returns new instance of MeshPoint with added position - * - * @param addend position to be added - * @return added MeshPoint - */ - MeshPoint addPosition(Point3d addend); - - /** - * returns new instance of MeshPoint with multiplied position by number - * - * @param number Number for multiplying - * @return multiplied MeshPoint - */ - MeshPoint multiplyPosition(double number); - - /** - * returns new instance of MeshPoint with divided position by number - * - * @param number Number for division - * @return divided MeshPoint - */ - MeshPoint dividePosition(double number); - - /** - * Returns the cross product of two points. - * - * @param meshPoint Second argument of the cross product operation. - * @return MeshPoint representing the resulting vector. - */ - MeshPoint crossProduct(MeshPoint meshPoint); - - /** - * returns the dot product of two points - * - * @param meshPoint Second argument of the dot product operation - * @return dot product of two instances of MeshPoint - */ - double dotProduct(MeshPoint meshPoint); - - /** - * returns absolute value of MeshPoint - * - * @return absolute value of MeshPoint - */ - double abs(); - - /** - * returns new instance of MeshPoint with subtracted normal - * - * @param subtrahend normal to be subtracted - * @return subtracted MeshPoint - */ - MeshPoint subtractNormal(MeshPoint subtrahend); - - /** - * returns new instance of MeshPoint with subtracted normal - * - * @param subtrahend normal to be subtracted - * @return subtracted MeshPoint - */ - MeshPoint subtractNormal(Vector3d subtrahend); - - /** - * returns new instance of MeshPoint with added normal - * - * @param addend normal to be added - * @return added MeshPoint - */ - MeshPoint addNormal(MeshPoint addend); - - /** - * returns new instance of MeshPoint with added normal - * - * @param addend normal to be added - * @return added MeshPoint - */ - MeshPoint addNormal(Vector3d addend); } diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPointImpl.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPointImpl.java index e8f64eb18e4cc1aff9bbfc9861e587cce9104e86..51c54481af080545691626ed5459a10f97d911ac 100644 --- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPointImpl.java +++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPointImpl.java @@ -62,106 +62,6 @@ public class MeshPointImpl implements MeshPoint { return texCoord; } - @Override - public double distanceTo(MeshPoint point) { - return this.position.distance(point.getPosition()); - } - - @Override - public MeshPoint subtractPosition(MeshPoint subtrahend) { - return subtractPosition(subtrahend.getPosition()); - } - - @Override - public MeshPoint subtractPosition(Point3d subtrahend) { - Point3d newPosition = new Point3d(position); - newPosition.sub(subtrahend); - return new MeshPointImpl(newPosition, normal, texCoord); - } - - @Override - public MeshPoint addPosition(MeshPoint addend) { - return addPosition(addend.getPosition()); - } - - @Override - public MeshPoint addPosition(Point3d addend) { - Point3d newPosition = new Point3d(position); - newPosition.add(addend); - return new MeshPointImpl(newPosition, normal, texCoord); - } - - @Override - public MeshPoint multiplyPosition(double number) { - Point3d newPosition = new Point3d(position); - newPosition.scale(number); - return new MeshPointImpl(newPosition, normal, texCoord); - /* - return new MeshPointImpl(new Vector3d(this.getPosition().x * number, - this.getPosition().y * number, this.getPosition().z * number), - normal, texCoord); - */ - } - - @Override - public MeshPoint dividePosition(double number) { - Point3d p = new Point3d(this.position); - p.scale(number); - return new MeshPointImpl(p, normal, texCoord); - } - - @Override - public MeshPoint crossProduct(MeshPoint meshPoint) { - Vector3d v = new Vector3d(); - v.cross(new Vector3d(this.position), new Vector3d(meshPoint.getPosition())); - return new MeshPointImpl(new Point3d(v), normal, texCoord); - /* - return new MeshPointImpl( - new Point3d( - this.position.y * meshPoint.getPosition().z - this.position.z * meshPoint.getPosition().y, - this.position.z * meshPoint.getPosition().x - this.position.x * meshPoint.getPosition().z, - this.position.x * meshPoint.getPosition().y - this.position.y * meshPoint.getPosition().x - ), normal, texCoord); - */ - } - - @Override - public double dotProduct(MeshPoint meshPoint) { - return (this.position.x * meshPoint.getPosition().x + this.position.y * meshPoint.getPosition().y + this.position.z * meshPoint.getPosition().z); - } - - @Override - public double abs() { - return Math.sqrt(this.getPosition().x * this.getPosition().x + - this.getPosition().y * this.getPosition().y + this.getPosition().z * this.getPosition().z); - } - - @Override - public MeshPoint subtractNormal(MeshPoint subtrahend) { - return subtractNormal(subtrahend.getNormal()); - } - - @Override - public MeshPoint subtractNormal(Vector3d subtrahend) { - Vector3d newNormal = new Vector3d(normal); - newNormal.sub(subtrahend); - newNormal.normalize(); - return new MeshPointImpl(position, newNormal, texCoord); - } - - @Override - public MeshPoint addNormal(MeshPoint addend) { - return addNormal(addend.getNormal()); - } - - @Override - public MeshPoint addNormal(Vector3d addend) { - Vector3d newNormal = new Vector3d(normal); - newNormal.add(addend); - newNormal.normalize(); - return new MeshPointImpl(position, newNormal, texCoord); - } - @Override public boolean equals(Object obj) { if (!(obj instanceof MeshPointImpl)) { diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshTriangle.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshTriangle.java index 6725dd1487776ce1bd943b8ef7c22726902461b3..9176377791fcd07abdc079952050863843ef8d4a 100644 --- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshTriangle.java +++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshTriangle.java @@ -152,9 +152,9 @@ public class MeshTriangle implements Iterable<MeshPoint> { MeshPoint vertex2 = facet.getVertex(index2); MeshPoint vertex3 = facet.getVertex(index3); - double a = (vertex2.subtractPosition(vertex3)).abs(); - double b = (vertex3.subtractPosition(vertex1)).abs(); - double c = (vertex2.subtractPosition(vertex1)).abs(); + double a = subtractPosition(vertex2.getPosition(), vertex3).length(); + double b = subtractPosition(vertex3.getPosition(), vertex1).length(); + double c = subtractPosition(vertex2.getPosition(), vertex1).length(); double d1 = a * a * (b * b + c * c - a * a); double d2 = b * b * (c * c + a * a - b * b); @@ -164,49 +164,101 @@ public class MeshTriangle implements Iterable<MeshPoint> { d1 /= dSum; d2 /= dSum; d3 /= dSum; + + Point3d v1Half = new Point3d(vertex2.getPosition()); + v1Half.add(vertex3.getPosition()); + v1Half.scale(0.5); + + Point3d v2Half = new Point3d(vertex1.getPosition()); + v1Half.add(vertex3.getPosition()); + v1Half.scale(0.5); + + Point3d v3Half = new Point3d(vertex2.getPosition()); + v1Half.add(vertex1.getPosition()); + v1Half.scale(0.5); - MeshPoint v1Half = (vertex2.addPosition(vertex3)).dividePosition(2); - MeshPoint v2Half = (vertex1.addPosition(vertex3)).dividePosition(2); - MeshPoint v3Half = (vertex2.addPosition(vertex1)).dividePosition(2); + //MeshPoint v1Half = (vertex2.addPosition(vertex3)).dividePosition(2); + //MeshPoint v2Half = (vertex1.addPosition(vertex3)).dividePosition(2); + //MeshPoint v3Half = (vertex2.addPosition(vertex1)).dividePosition(2); if (d1 < 0) { - double v3Area = ((v2Half.subtractPosition(vertex3)).crossProduct(v1Half.subtractPosition(vertex3))).abs() / 2.0; - double v2Area = ((v3Half.subtractPosition(vertex2)).crossProduct(v1Half.subtractPosition(vertex2))).abs() / 2.0; - double v1Area = (((v1Half.subtractPosition(vertex1)).crossProduct(v3Half.subtractPosition(vertex1))).abs() / 2.0) + - (((v1Half.subtractPosition(vertex1)).crossProduct(v2Half.subtractPosition(vertex1))).abs() / 2.0); + Vector3d v = new Vector3d(); + v.cross(subtractPosition(v2Half, vertex3), subtractPosition(v1Half, vertex3)); + double v3Area = v.length() / 2.0; + + v.cross(subtractPosition(v3Half, vertex2), subtractPosition(v1Half, vertex2)); + double v2Area = v.length() / 2.0; + + v.cross(subtractPosition(v1Half, vertex1), subtractPosition(v3Half, vertex1)); + double v1Area = v.length() / 2.0; + v.cross(subtractPosition(v1Half, vertex1), subtractPosition(v3Half, vertex1)); + v1Area += v.length() / 2.0; + voronoiPoint = new Point3d(v1Area, v2Area, v3Area); return voronoiPoint; } if (d2 < 0) { - double v1Area = ((v3Half.subtractPosition(vertex1)).crossProduct(v2Half.subtractPosition(vertex1))).abs() / 2.0; - double v3Area = ((v1Half.subtractPosition(vertex3)).crossProduct(v2Half.subtractPosition(vertex3))).abs() / 2.0; - double v2Area = (((v2Half.subtractPosition(vertex2)).crossProduct(v1Half.subtractPosition(vertex2))).abs() / 2.0) + - (((v2Half.subtractPosition(vertex2)).crossProduct(v3Half.subtractPosition(vertex2))).abs() / 2.0); + Vector3d v = new Vector3d(); + v.cross(subtractPosition(v3Half, vertex1), subtractPosition(v2Half, vertex1)); + double v1Area = v.length() / 2.0; + + v.cross(subtractPosition(v1Half, vertex3), subtractPosition(v2Half, vertex3)); + double v3Area = v.length() / 2.0; + + v.cross(subtractPosition(v2Half, vertex2), subtractPosition(v1Half, vertex2)); + double v2Area = v.length() / 2.0; + v.cross(subtractPosition(v2Half, vertex2), subtractPosition(v3Half, vertex2)); + v2Area += v.length() / 2.0; + voronoiPoint = new Point3d(v1Area, v2Area, v3Area); return voronoiPoint; } if (d3 < 0) { - double v2Area = ((v1Half.subtractPosition(vertex2)).crossProduct(v3Half.subtractPosition(vertex2))).abs() / 2.0; - double v1Area = ((v2Half.subtractPosition(vertex1)).crossProduct(v3Half.subtractPosition(vertex1))).abs() / 2.0; - double v3Area = (((v3Half.subtractPosition(vertex3)).crossProduct(v2Half.subtractPosition(vertex3))).abs() / 2.0) + - (((v3Half.subtractPosition(vertex3)).crossProduct(v1Half.subtractPosition(vertex3))).abs() / 2.0); + Vector3d v = new Vector3d(); + v.cross(subtractPosition(v1Half, vertex2), subtractPosition(v3Half, vertex2)); + double v2Area = v.length() / 2.0; + + v.cross(subtractPosition(v2Half, vertex1), subtractPosition(v3Half, vertex1)); + double v1Area = v.length() / 2.0; + + v.cross(subtractPosition(v3Half, vertex3), subtractPosition(v2Half, vertex3)); + double v3Area = v.length() / 2.0; + v.cross(subtractPosition(v3Half, vertex3), subtractPosition(v1Half, vertex3)); + v3Area += v.length() / 2.0; + voronoiPoint = new Point3d(v1Area, v2Area, v3Area); return voronoiPoint; } - MeshPoint circumcenter = vertex1.multiplyPosition(d1).addPosition(vertex2.multiplyPosition(d2).addPosition(vertex3.multiplyPosition(d3))); + Point3d aux1 = new Point3d(vertex1.getPosition()); + Point3d aux2 = new Point3d(vertex2.getPosition()); + Point3d aux3 = new Point3d(vertex3.getPosition()); + aux1.scale(d1); + aux2.scale(d2); + aux3.scale(d3); - double v1Area = (((v2Half.subtractPosition(vertex1)).crossProduct(circumcenter.subtractPosition(vertex1))).abs() / 2.0) + - (((v3Half.subtractPosition(vertex1)).crossProduct(circumcenter.subtractPosition(vertex1))).abs() / 2.0); + Point3d circumcenter = new Point3d(aux1); + circumcenter.add(aux2); + circumcenter.add(aux3); - double v2Area = (((v3Half.subtractPosition(vertex2)).crossProduct(circumcenter.subtractPosition(vertex2))).abs() / 2.0) + - (((v1Half.subtractPosition(vertex2)).crossProduct(circumcenter.subtractPosition(vertex2))).abs() / 2.0); + Vector3d v = new Vector3d(); + v.cross(subtractPosition(v2Half, vertex1), subtractPosition(circumcenter, vertex1)); + double v1Area = v.length() / 2.0; + v.cross(subtractPosition(v3Half, vertex1), subtractPosition(circumcenter, vertex1)); + v1Area += v.length() / 2.0; + + v.cross(subtractPosition(v3Half, vertex2), subtractPosition(circumcenter, vertex2)); + double v2Area = v.length() / 2.0; + v.cross(subtractPosition(v1Half, vertex2), subtractPosition(circumcenter, vertex2)); + v2Area += v.length() / 2.0; + + v.cross(subtractPosition(v1Half, vertex3), subtractPosition(circumcenter, vertex3)); + double v3Area = v.length() / 2.0; + v.cross(subtractPosition(v2Half, vertex3), subtractPosition(circumcenter, vertex3)); + v3Area += v.length() / 2.0; - double v3Area = (((v1Half.subtractPosition(vertex3)).crossProduct(circumcenter.subtractPosition(vertex3))).abs() / 2.0) + - (((v2Half.subtractPosition(vertex3)).crossProduct(circumcenter.subtractPosition(vertex3))).abs() / 2.0); voronoiPoint = new Point3d(v1Area, v2Area, v3Area); - return voronoiPoint; } @@ -342,4 +394,9 @@ public class MeshTriangle implements Iterable<MeshPoint> { return v2; } + protected Vector3d subtractPosition(Point3d p1, MeshPoint p2) { + Vector3d e = new Vector3d(p1); + e.sub(p2.getPosition()); + return e; + } } diff --git a/MeshModel/src/test/java/cz/fidentis/analyst/mesh/kdtree/KdTreeTest.java b/MeshModel/src/test/java/cz/fidentis/analyst/mesh/kdtree/KdTreeTest.java index e0f33ac619d90062ca68f6d6f6b01351126056f4..ac393103ca048c205118afd1e25fee9a45770c77 100644 --- a/MeshModel/src/test/java/cz/fidentis/analyst/mesh/kdtree/KdTreeTest.java +++ b/MeshModel/src/test/java/cz/fidentis/analyst/mesh/kdtree/KdTreeTest.java @@ -159,11 +159,11 @@ public class KdTreeTest { } MeshPoint closest = points.get(0); - double dis = closest.distanceTo(p); + double dis = closest.getPosition().distance(p.getPosition()); for(MeshPoint cl : points){ - if(cl.distanceTo(p) < dis){ - dis = cl.distanceTo(p); + if(cl.getPosition().distance(p.getPosition()) < dis){ + dis = cl.getPosition().distance(p.getPosition()); closest = cl; } }