Starting from 2021-07-01, all LRZ GitLab users will be required to explicitly accept the GitLab Terms of Service. Please see the detailed information at https://doku.lrz.de/display/PUBLIC/GitLab and make sure that your projects conform to the requirements.

Commit 9c467b36 authored by Benedikt Zoennchen's avatar Benedikt Zoennchen
Browse files

fix an incorrect endless recursion call.

parent d2188ac0
Pipeline #272516 passed with stages
in 131 minutes and 31 seconds
...@@ -192,7 +192,7 @@ public class MeshQuantityPrinting { ...@@ -192,7 +192,7 @@ public class MeshQuantityPrinting {
bufferedWriterQualities2.write("iteration quality\n"); bufferedWriterQualities2.write("iteration quality\n");
BufferedWriter bufferedWriterAngles = IOUtils.getWriter("angles_eik.csv", dir); BufferedWriter bufferedWriterAngles = IOUtils.getWriter("angles_eik.csv", dir);
bufferedWriterAngles.write("iteration angle3D\n"); bufferedWriterAngles.write("iteration angle\n");
int init = 1; int init = 1;
while (!meshImprover.isInitialized()) { while (!meshImprover.isInitialized()) {
...@@ -255,7 +255,7 @@ public class MeshQuantityPrinting { ...@@ -255,7 +255,7 @@ public class MeshQuantityPrinting {
bufferedWriterQualities2.write("iteration quality\n"); bufferedWriterQualities2.write("iteration quality\n");
BufferedWriter bufferedWriterAngles = IOUtils.getWriter("angles_dist.csv", dir); BufferedWriter bufferedWriterAngles = IOUtils.getWriter("angles_dist.csv", dir);
bufferedWriterAngles.write("iteration angle3D\n"); bufferedWriterAngles.write("iteration angle\n");
int iteration = 1; int iteration = 1;
while (iteration < maxIteration+1) { while (iteration < maxIteration+1) {
......
...@@ -1390,7 +1390,7 @@ public interface IPolyConnectivity<V extends IVertex, E extends IHalfEdge, F ext ...@@ -1390,7 +1390,7 @@ public interface IPolyConnectivity<V extends IVertex, E extends IHalfEdge, F ext
} }
default void removeFaceAtBoundary(@NotNull final F face, @NotNull final F boundary, final boolean deleteIsolatedVertices) { default void removeFaceAtBoundary(@NotNull final F face, @NotNull final F boundary, final boolean deleteIsolatedVertices) {
removeFaceAtBoundary(face, boundary, deleteIsolatedVertices); removeFaceAtBoundary(face, boundary, deleteIsolatedVertices, true);
} }
/** /**
......
...@@ -2734,7 +2734,8 @@ public interface ITriConnectivity<V extends IVertex, E extends IHalfEdge, F exte ...@@ -2734,7 +2734,8 @@ public interface ITriConnectivity<V extends IVertex, E extends IHalfEdge, F exte
* this might happen if the line intersects a point, in this case both neighbouring edges are feasible * this might happen if the line intersects a point, in this case both neighbouring edges are feasible
*/ */
if(inEdge == null) { if(inEdge == null) {
inEdge = getMesh().streamEdges(startFace).filter(e -> isLeftOf(p.getX(), p.getY(), e)).findAny().get(); Optional<E> optEdge = getMesh().streamEdges(startFace).filter(e -> isLeftOf(p.getX(), p.getY(), e)).findAny();
inEdge = optEdge.get();
} }
} }
......
...@@ -17,7 +17,7 @@ public class Parameters { ...@@ -17,7 +17,7 @@ public class Parameters {
public final static boolean uniform = false; public final static boolean uniform = false;
public final static String method = "Distmesh"; // "Distmesh" or "Density" public final static String method = "Distmesh"; // "Distmesh" or "Density"
public final static double qualityMeasurement = 0.95; public final static double qualityMeasurement = 0.95;
public final static double qualityConvergence = 0.01; public final static double qualityConvergence = 0.0;
public final static double MINIMUM = 0.25; public final static double MINIMUM = 0.25;
public final static double DENSITYWEIGHT = 2; public final static double DENSITYWEIGHT = 2;
public final static int NPOINTS = 100000; public final static int NPOINTS = 100000;
...@@ -26,5 +26,5 @@ public class Parameters { ...@@ -26,5 +26,5 @@ public class Parameters {
public final static int SEGMENTDIVISION = 0; public final static int SEGMENTDIVISION = 0;
//TODO increase this //TODO increase this
public final static int MAX_NUMBER_OF_STEPS = 200; public final static int MAX_NUMBER_OF_STEPS = 200;
public final static int HIGHEST_LEGAL_TEST = 10; public final static int HIGHEST_LEGAL_TEST = Integer.MAX_VALUE;
} }
...@@ -651,6 +651,9 @@ public class GenEikMesh<V extends IVertex, E extends IHalfEdge, F extends IFace> ...@@ -651,6 +651,9 @@ public class GenEikMesh<V extends IVertex, E extends IHalfEdge, F extends IFace>
// TODO: Get rid of VPoint // TODO: Get rid of VPoint
VPoint p1p2 = p1.subtract(p2); VPoint p1p2 = p1.subtract(p2);
double len = p1p2.distanceToOrigin(); double len = p1p2.distanceToOrigin();
if(len <= GeometryUtils.DOUBLE_EPS) {
return new VPoint(0, 0);
}
double desiredLen = 0.9 * Math.sqrt(3) * getDesiredEdgeLength(p1, p2); double desiredLen = 0.9 * Math.sqrt(3) * getDesiredEdgeLength(p1, p2);
double ratio = len / desiredLen; double ratio = len / desiredLen;
double absForce = f.apply(ratio); double absForce = f.apply(ratio);
...@@ -1379,9 +1382,11 @@ public class GenEikMesh<V extends IVertex, E extends IHalfEdge, F extends IFace> ...@@ -1379,9 +1382,11 @@ public class GenEikMesh<V extends IVertex, E extends IHalfEdge, F extends IFace>
IPoint velocity = getForce(vertex); IPoint velocity = getForce(vertex);
double factor = 1.0; double factor = 1.0;
IPoint movement = velocity.scalarMultiply(delta * factor); IPoint movement = velocity.scalarMultiply(delta * factor);
while(!move(vertex, vertex.getX() + movement.getX(), vertex.getY() + movement.getY())) { int count = 0;
while(!move(vertex, vertex.getX() + movement.getX(), vertex.getY() + movement.getY()) && count < 10) {
factor /= 2.0; factor /= 2.0;
movement = velocity.scalarMultiply(delta * factor); movement = velocity.scalarMultiply(delta * factor);
count++;
} }
} }
......
...@@ -16,13 +16,19 @@ import org.vadere.meshing.mesh.triangulation.IEdgeLengthFunction; ...@@ -16,13 +16,19 @@ import org.vadere.meshing.mesh.triangulation.IEdgeLengthFunction;
import org.vadere.meshing.mesh.triangulation.improver.eikmesh.impl.PEikMesh; import org.vadere.meshing.mesh.triangulation.improver.eikmesh.impl.PEikMesh;
import org.vadere.meshing.mesh.triangulation.triangulator.impl.PRuppertsTriangulator; import org.vadere.meshing.mesh.triangulation.triangulator.impl.PRuppertsTriangulator;
import org.vadere.meshing.utils.color.Colors; import org.vadere.meshing.utils.color.Colors;
import org.vadere.meshing.utils.io.IOUtils;
import org.vadere.meshing.utils.io.tex.TexGraphGenerator;
import org.vadere.util.geometry.GeometryUtils; import org.vadere.util.geometry.GeometryUtils;
import org.vadere.util.geometry.shapes.VPoint;
import org.vadere.util.geometry.shapes.VPolygon; import org.vadere.util.geometry.shapes.VPolygon;
import org.vadere.util.geometry.shapes.VRectangle; import org.vadere.util.geometry.shapes.VRectangle;
import org.vadere.util.logging.Logger; import org.vadere.util.logging.Logger;
import org.vadere.util.math.IDistanceFunction; import org.vadere.util.math.IDistanceFunction;
import java.awt.*; import java.awt.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Predicate; import java.util.function.Predicate;
...@@ -30,7 +36,6 @@ import java.util.function.Predicate; ...@@ -30,7 +36,6 @@ import java.util.function.Predicate;
public class MeshConstructor { public class MeshConstructor {
private static Logger logger = Logger.getLogger(MeshConstructor.class); private static Logger logger = Logger.getLogger(MeshConstructor.class);
public IMesh<PVertex, PHalfEdge, PFace> pslgToCoarsePMesh(@NotNull final PSLG pslg, final boolean viszalize) { public IMesh<PVertex, PHalfEdge, PFace> pslgToCoarsePMesh(@NotNull final PSLG pslg, final boolean viszalize) {
VRectangle bound = GeometryUtils.boundRelativeSquared(pslg.getSegmentBound().getPoints(), 0.3); VRectangle bound = GeometryUtils.boundRelativeSquared(pslg.getSegmentBound().getPoints(), 0.3);
PSLG boundedPSLG = pslg.conclose(bound); PSLG boundedPSLG = pslg.conclose(bound);
...@@ -67,10 +72,14 @@ public class MeshConstructor { ...@@ -67,10 +72,14 @@ public class MeshConstructor {
logger.info("construct distance function"); logger.info("construct distance function");
IDistanceFunction distanceFunctionApproximation = new DistanceFunctionApproxBF(pslg, distanceFunction, () -> new PMesh()); IDistanceFunction distanceFunctionApproximation = new DistanceFunctionApproxBF(pslg, distanceFunction, () -> new PMesh());
IEdgeLengthFunction edgeLengthFunction = p -> hmin + smoothness * Math.abs(((DistanceFunctionApproxBF) distanceFunctionApproximation).apply(p)); IEdgeLengthFunction edgeLengthFunction = p -> hmin + smoothness * Math.abs((distanceFunctionApproximation).apply(p));
EdgeLengthFunctionApprox edgeLengthFunctionApprox = new EdgeLengthFunctionApprox(pslg, edgeLengthFunction, p -> hmax); EdgeLengthFunctionApprox edgeLengthFunctionApprox = new EdgeLengthFunctionApprox(pslg, edgeLengthFunction, p -> hmax);
edgeLengthFunctionApprox.smooth(smoothness); edgeLengthFunctionApprox.smooth(smoothness);
logger.info("construct element size function"); logger.info("construct element size function");
//((DistanceFunctionApproxBF) distanceFunctionApproximation).printPython();
//edgeLengthFunctionApprox.printPython();
//edgeLengthFunctionApprox.printPython(); //edgeLengthFunctionApprox.printPython();
...@@ -105,9 +114,41 @@ public class MeshConstructor { ...@@ -105,9 +114,41 @@ public class MeshConstructor {
while (!meshImprover.isFinished()) { while (!meshImprover.isFinished()) {
synchronized (meshImprover.getMesh()) { synchronized (meshImprover.getMesh()) {
meshImprover.improve(); meshImprover.improve();
logger.info("quality = " + meshImprover.getQuality());
} }
meshPanel.repaint(); meshPanel.repaint();
} }
logger.info("generation completed.");
/*BufferedWriter meshWriter = null;
try {
File dir = new File("/Users/bzoennchen/Development/workspaces/hmRepo/PersZoennchen/PhD/trash/generated/eikmesh/");
BufferedWriter bufferedWriterQualities1 = IOUtils.getWriter("qualities1_eik.csv", dir);
bufferedWriterQualities1.write("iteration quality\n");
BufferedWriter bufferedWriterQualities2 = IOUtils.getWriter("qualities2_eik.csv", dir);
bufferedWriterQualities2.write("iteration quality\n");
BufferedWriter bufferedWriterAngles = IOUtils.getWriter("angles_eik.csv", dir);
bufferedWriterAngles.write("iteration angle\n");
bufferedWriterQualities1.write(printQualities(200, meshImprover.getMesh(), f -> meshImprover.getTriangulation().faceToQuality(f)));
bufferedWriterQualities1.close();
bufferedWriterQualities2.write(printQualities(200, meshImprover.getMesh(), f -> meshImprover.getTriangulation().faceToLongestEdgeQuality(f)));
bufferedWriterQualities2.close();
bufferedWriterAngles.write(printAngles(200, meshImprover.getMesh()));
bufferedWriterAngles.close();
meshWriter = IOUtils.getWriter("kaiserslautern_mittel.tex", dir);
meshWriter.write(TexGraphGenerator.toTikz(meshImprover.getMesh(), f -> Colors.YELLOW, e -> Color.BLACK, vertexColorFunction, 1.0f, true));
meshWriter.close();
} catch (IOException e) {
e.printStackTrace();
}*/
} else { } else {
meshImprover.generate(); meshImprover.generate();
} }
...@@ -167,4 +208,34 @@ public class MeshConstructor { ...@@ -167,4 +208,34 @@ public class MeshConstructor {
return meshImprover.getMesh(); return meshImprover.getMesh();
} }
// delete this code
private static String printAngles(int iteration, IMesh<PVertex, PHalfEdge, PFace> mesh){
StringBuilder builder = new StringBuilder();
for(PFace face : mesh.getFaces()) {
for(PHalfEdge edge : mesh.getEdges(face)) {
VPoint p1 = mesh.toPoint(edge);
VPoint p2 = mesh.toPoint(mesh.getNext(edge));
VPoint p3 = mesh.toPoint(mesh.getPrev(edge));
builder.append(iteration);
builder.append(" ");
builder.append(GeometryUtils.angle(p1, p2, p3));
builder.append("\n");
}
}
return builder.toString();
}
private static String printQualities(int iteration, IMesh<PVertex, PHalfEdge, PFace> mesh, Function<PFace, Double> rho){
StringBuilder builder = new StringBuilder();
for(PFace face : mesh.getFaces()) {
double quality = rho.apply(face);
builder.append(iteration);
builder.append(" ");
builder.append(quality);
builder.append("\n");
}
return builder.toString();
}
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment