public void computeVertices() { vertices.clear(); for (Connection connection : connections) { vertices.add(connection.getSourcePoint()); vertices.add(connection.getTargetPoint()); } }
double distance = connection.distanceSquared(source); double percentage = closestConnection.percentageAlongConnection(source); double epsilon = 1.0e-3; if (percentage <= epsilon) connections.add(new Connection(sourceConnectionPoint, closestConnection.getSourcePoint())); connections.add(new Connection(sourceConnectionPoint, closestConnection.getTargetPoint())); ConnectionPoint3D newConnectionPoint = closestConnection.getPointGivenPercentage(percentage, sourceId); fallbackMap.addConnection(new Connection(closestConnection.getSourcePoint(), newConnectionPoint)); fallbackMap.addConnection(new Connection(newConnectionPoint, closestConnection.getTargetPoint())); connections.add(new Connection(sourceConnectionPoint, newConnectionPoint));
default double getConnectionWeight(Connection connection) { return connection.length(); } }
connections.add(new Connection(source, target)); if (!connection.getSourcePoint().equals(previousTarget)) connection.flip(); previousTarget = connection.getTargetPoint(); Connection next = connections.get(i + 1); double distanceToNextSquared = next.distanceSquared(curr.getSourcePoint()); ConnectionPoint3D newPoint = next.orthogonalProjection(curr.getSourcePoint(), curr.getSourcePoint().getRegionId()); connections.set(i, new Connection(curr.getSourcePoint(), newPoint)); connections.set(i + 1, new Connection(newPoint, next.getTargetPoint())); connections.forEach(connection -> path.add(connection.getTargetPoint()));
public Connection getCopy() { return new Connection(this); }
for (int pathIndex = 0; pathIndex < stageSize; pathIndex++) Connection toStage1 = new Connection(start, stage1[pathIndex]); Connection toStage2 = new Connection(stage1[pathIndex], stage2[pathIndex]); Connection toGoal = new Connection(stage2[pathIndex], goal); double pathLength = toStage1.length() + toStage2.length() + toGoal.length();
public static SingleSourceVisibilityMap connectToClosestPoints(ConnectionPoint3D source, int maximumNumberOfConnections, List<NavigableRegion> navigableRegions, int mapId) { List<Connection> allConnections = new ArrayList<>(); for (int i = 0; i < navigableRegions.size(); i++) { VisibilityMap targetMap = navigableRegions.get(i).getVisibilityMapInWorld(); Set<ConnectionPoint3D> targetPoints = targetMap.getVertices(); for (ConnectionPoint3D targetPoint : targetPoints) { allConnections.add(new Connection(source, targetPoint)); } } Collections.sort(allConnections, (c1, c2) -> { double c1LengthSquared = c1.lengthSquared(); double c2LengthSquared = c2.lengthSquared(); return c1LengthSquared < c2LengthSquared ? -1 : 1; }); HashSet<Connection> connections = new HashSet<>(); connections.addAll(allConnections.subList(0, maximumNumberOfConnections)); return new SingleSourceVisibilityMap(source, mapId, connections); }
@Override public void applyTransform(Transform transform) { connections.forEach(c -> c.applyTransform(transform)); }
@Override public void applyInverseTransform(Transform transform) { connections.forEach(c -> c.applyInverseTransform(transform)); } }
public void addConnection(ConnectionPoint3D source, ConnectionPoint3D target) { visibilityMap.addConnection(new Connection(source, target)); }
Connection toStage = new Connection(source, target); connections.add(toStage); pathLength += toStage.length(); source = target; Connection toGoal = new Connection(source, goal); pathLength += toGoal.length();
public static void assertConnectionsEqual(Connection connectionExpected, Connection connectionActual, double epsilon) { assertConnectionPointsEqual(connectionExpected.getSourcePoint(), connectionActual.getSourcePoint(), epsilon); assertConnectionPointsEqual(connectionExpected.getTargetPoint(), connectionActual.getTargetPoint(), epsilon); }
double distance = connection.distanceSquared(sourceInworld); connections.add(new Connection(sourceConnectionPoint, closestHostPoint)); return new SingleSourceVisibilityMap(sourceInworld, connections, hostRegion); double percentage = closestFallbackConnection.percentageAlongConnection(sourceInworld); double epsilon = 1.0e-3; if (percentage <= epsilon) connections.add(new Connection(sourceConnectionPoint, closestFallbackConnection.getSourcePoint())); connections.add(new Connection(sourceConnectionPoint, closestFallbackConnection.getTargetPoint())); ConnectionPoint3D newConnectionPoint = closestFallbackConnection.getPointGivenPercentage(percentage, mapId); fallbackMap.addConnection(new Connection(closestFallbackConnection.getSourcePoint(), newConnectionPoint)); fallbackMap.addConnection(new Connection(newConnectionPoint, closestFallbackConnection.getTargetPoint())); connections.add(new Connection(sourceConnectionPoint, newConnectionPoint));
public static Set<Connection> createStaticVisibilityMap(Point3DReadOnly observer, int observerRegionId, List<Cluster> clusters, int clustersRegionId) { Set<Connection> connections = new HashSet<>(); List<Point2DReadOnly> listOfTargetPoints = new ArrayList<>(); Point2D observer2D = new Point2D(observer); // Add all navigable points (including dynamic objects) to a list for (Cluster cluster : clusters) { if (cluster.isInsideNonNavigableZone(observer2D)) return Collections.emptySet(); for (Point2DReadOnly point : cluster.getNavigableExtrusionsInLocal()) { listOfTargetPoints.add(point); } } for (int j = 0; j < listOfTargetPoints.size(); j++) { Point2DReadOnly target = listOfTargetPoints.get(j); if (observer.distanceXYSquared(target) > MAGIC_NUMBER) { boolean targetIsVisible = isPointVisibleForStaticMaps(clusters, observer2D, target); if (targetIsVisible) { connections.add(new Connection(observer, observerRegionId, new Point3D(target), clustersRegionId)); } } } return connections; }
public static void addConnectionToGraph(Connection connection, SimpleWeightedGraph<ConnectionPoint3D, DefaultWeightedEdge> graphToUpdate) { addConnectionToGraph(connection, connection.length(), graphToUpdate); }
boolean isConnectionValid(ConnectionPoint3D source, ConnectionPoint3D target); }
public static Connection getRandomConnection(Random random) { int startId = RandomNumbers.nextInt(random, 0, 100); int targetId = RandomNumbers.nextInt(random, 0, 100); Point3DReadOnly startPoint = EuclidCoreRandomTools.nextPoint3D(random, 50); Point3DReadOnly targetPoint = EuclidCoreRandomTools.nextPoint3D(random, 50); return new Connection(startPoint, startId, targetPoint, targetId); }
private void buildVisibilityMap(Collection<VisibilityMapHolder> visibilityMapHolders) { visibilityMap.clear(); nodeCosts.clear(); for (VisibilityMapHolder visibilityMapHolder : visibilityMapHolders) { VisibilityMap visibilityMap = visibilityMapHolder.getVisibilityMapInWorld(); for (Connection connection : visibilityMap) { ConnectionData connectionData = new ConnectionData(); connectionData.connection = connection; connectionData.edgeWeight = visibilityMapHolder.getConnectionWeight(connection); this.visibilityMap.computeIfAbsent(connection.getSourcePoint(), (p) -> new HashSet<>()).add(connectionData); this.visibilityMap.computeIfAbsent(connection.getTargetPoint(), (p) -> new HashSet<>()).add(connectionData); } } }
connectionsToPack.add(new Connection(navigableExtrusions.get(i), mapId, navigableExtrusions.get(i + 1), mapId)); connectionsToPack.add(new Connection(source, mapId, target, mapId));
if (connectionPoint3D.getSourcePoint().getRegionId() < t1.getSourcePoint().getRegionId()) return -1; else if (connectionPoint3D.getSourcePoint().getRegionId() > t1.getSourcePoint().getRegionId()) return 1; else if (connectionPoint3D.getTargetPoint().getRegionId() < t1.getTargetPoint().getRegionId()) return -1; else if (connectionPoint3D.getTargetPoint().getRegionId() > t1.getTargetPoint().getRegionId()) return 1; else if (connectionPoint3D.getSourcePoint().getX() < t1.getSourcePoint().getX()) return -1; else if (connectionPoint3D.getSourcePoint().getX() > t1.getSourcePoint().getX()) return 1; else if (connectionPoint3D.getTargetPoint().getX() < t1.getTargetPoint().getX()) return -1; else if (connectionPoint3D.getTargetPoint().getX() > t1.getTargetPoint().getX()) return 1; else if (connectionPoint3D.getSourcePoint().getY() < t1.getSourcePoint().getY()) return -1; else if (connectionPoint3D.getSourcePoint().getY() > t1.getSourcePoint().getY()) return 1; else