CPD Results
The following document contains the results of PMD's CPD 7.7.0.
Duplications
File | Line |
---|---|
org/djutils/draw/curve/OffsetFlattener2d.java | 253 |
org/djutils/draw/curve/OffsetFlattener2d.java | 349 |
this.maxAngle = maxAngle; } @Override public PolyLine2d flatten(final OffsetCurve2d curve, final ContinuousPiecewiseLinearFunction of) { Throw.whenNull(curve, "curve"); Flattener.FlattableCurve<Point2d, Double> fc = makeFlattableCurve(curve, of); NavigableMap<Double, Point2d> result = new TreeMap<>(); loadKnots(result, curve, of); Map<Double, Double> directions = new LinkedHashMap<>(); directions.put(0.0, curve.getDirection(0.0, of)); // directions can't do ULP before 0.0 Set<Double> knots = new HashSet<>(); for (double knot : result.keySet()) { if (knot > 0) { directions.put(knot, curve.getDirection(knot - Math.ulp(knot), of)); } if (knot != 0.0 && knot != 1.0) { knots.add(knot); } } // Walk along all point pairs and see if additional points need to be inserted double prevT = result.firstKey(); Point2d prevPoint = result.get(prevT); Map.Entry<Double, Point2d> entry; int iterationsAtSinglePoint = 0; while ((entry = result.higherEntry(prevT)) != null) { double nextT = entry.getKey(); Point2d nextPoint = entry.getValue(); double medianT = (prevT + nextT) / 2; |
File | Line |
---|---|
org/djutils/draw/line/PolyLine2d.java | 1170 |
org/djutils/draw/line/PolyLine3d.java | 973 |
List<Point2d> pointList = new ArrayList<>(); int indexInStart = 0; int indexInEnd = 0; while (indexInStart < this.size() && indexInEnd < endLine.size()) { double fractionInStart = lengthAtIndex(indexInStart) / this.length; double fractionInEnd = endLine.lengthAtIndex(indexInEnd) / endLine.length; if (fractionInStart < fractionInEnd) { pointList.add(get(indexInStart).interpolate(endLine.getLocation(fractionInStart * endLine.length), transition.function(fractionInStart))); indexInStart++; } else if (fractionInStart > fractionInEnd) { pointList.add(this.getLocation(fractionInEnd * this.length).interpolate(endLine.get(indexInEnd), transition.function(fractionInEnd))); indexInEnd++; } else { pointList.add(this.get(indexInStart).interpolate(endLine.getLocation(fractionInEnd * endLine.length), transition.function(fractionInStart))); indexInStart++; indexInEnd++; } } return new PolyLine2d(NO_FILTER, pointList); |
File | Line |
---|---|
org/djutils/draw/line/PolyLine2d.java | 735 |
org/djutils/draw/line/PolyLine3d.java | 723 |
point.y - (this.y[index - 1] + fraction * (this.y[index] - this.y[index - 1]))); if (distance < bestDistanceExtended && (fraction >= 0.0 && fraction <= 1.0 || (fraction < 0.0 && index == 1) || fraction > 1.0 && index == this.size() - 1)) { bestDistanceExtended = distance; } if (distance < bestDistance && (fraction >= 0.0 || index == 1 && limitHandling != null && !limitHandling) && (fraction <= 1.0 || index == this.size() - 1 && limitHandling != null && !limitHandling)) { bestDistance = distance; result = lengthAtIndex(index - 1) + fraction * (lengthAtIndex(index) - lengthAtIndex(index - 1)); } else if (fraction < 0.0 && limitHandling != null && limitHandling) { distance = Math.hypot(point.x - this.x[index - 1], point.y - this.y[index - 1]); |
File | Line |
---|---|
org/djutils/draw/line/PolyLine2d.java | 490 |
org/djutils/draw/line/PolyLine3d.java | 471 |
Point2d currentPoint = get(index); if (null != prevPoint && prevPoint.distance(currentPoint) < noiseLevel) { if (index == this.size() - 1) { if (list.size() > 1) { // Replace the last point of the result by the last point of this PolyLine2d list.set(list.size() - 1, currentPoint); } else { // Append the last point of this even though it is close to the first point than the noise value to // comply with the requirement that first and last point of this are ALWAYS included in the result. list.add(currentPoint); } } continue; // Do not replace prevPoint by currentPoint } list.add(currentPoint); prevPoint = currentPoint; } if (list.size() == this.x.length) { return this; } if (list.size() == 2 && list.get(0).equals(list.get(1))) { // Insert point 1 of this; it MUST be different from point 0; so we don't have to test for anything. list.add(1, get(1)); } return new PolyLine2d(list); |
File | Line |
---|---|
org/djutils/draw/line/PolyLine2d.java | 583 |
org/djutils/draw/line/PolyLine3d.java | 561 |
else if (1 == lines.length) { return lines[0]; } int size = lines[0].size(); for (int i = 1; i < lines.length; i++) { if (lines[i - 1].getLast().distance(lines[i].getFirst()) > tolerance) { throw new IllegalArgumentException( "Lines are not connected: " + lines[i - 1].getLast() + " to " + lines[i].getFirst() + " distance is " + lines[i - 1].getLast().distance(lines[i].getFirst()) + " > " + tolerance); } size += lines[i].size() - 1; } |
File | Line |
---|---|
org/djutils/draw/curve/Flattener2d.java | 279 |
org/djutils/draw/curve/OffsetFlattener2d.java | 366 |
directions.put(knot, curve.getDirection(knot - Math.ulp(knot))); } if (knot != 0.0 && knot != 1.0) { knots.add(knot); } } // Walk along all point pairs and see if additional points need to be inserted double prevT = result.firstKey(); Point2d prevPoint = result.get(prevT); Map.Entry<Double, Point2d> entry; int iterationsAtSinglePoint = 0; while ((entry = result.higherEntry(prevT)) != null) { double nextT = entry.getKey(); Point2d nextPoint = entry.getValue(); double medianT = (prevT + nextT) / 2; // Check max angle if (checkDirectionError(prevPoint.directionTo(nextPoint), directions.get(prevT), directions.get(nextT), this.maxAngle)) { // We need to insert another point Point2d medianPoint = curve.getPoint(medianT); |
File | Line |
---|---|
org/djutils/draw/curve/Flattener2d.java | 203 |
org/djutils/draw/curve/Flattener3d.java | 215 |
Point2d medianPoint = curve.getPoint(medianT); // Check max deviation if (checkPositionError(medianPoint, prevPoint, nextPoint, this.maxDeviation)) { // We need to insert another point result.put(medianT, medianPoint); directions.put(medianT, curve.getDirection(medianT)); continue; } // Check max angle if (checkDirectionError(prevPoint.directionTo(nextPoint), directions.get(prevT), directions.get(nextT), this.maxAngle)) { // We need to insert another point result.put(medianT, medianPoint); directions.put(medianT, curve.getDirection(medianT)); iterationsAtSinglePoint++; Throw.when(iterationsAtSinglePoint == 50, IllegalArgumentException.class, "Required a new point 50 times " + "around the same point (t=%f). Likely there is an (unreported) knot in the Curve2d.", |
File | Line |
---|---|
org/djutils/draw/curve/Flattener2d.java | 121 |
org/djutils/draw/curve/Flattener3d.java | 133 |
Point2d medianPoint = curve.getPoint(medianT); // Check max deviation if (checkPositionError(medianPoint, prevPoint, nextPoint, this.maxDeviation)) { // We need to insert another point result.put(medianT, medianPoint); continue; } if (prevPoint.distance(nextPoint) > this.maxDeviation && checkInflectionPoint(curve, prevT, medianT, nextT, prevPoint, nextPoint)) { // There is an inflection point, inserting the halfway point should take care of this result.put(medianT, medianPoint); continue; } if (checkLoopBack(curve.getDirection(prevT), curve.getDirection(nextT))) { // The curve loops back onto itself. Inserting the halfway point should prevent missing out a major detour // This check is NOT needed in the MaxDeviationAndAngle flattener. result.put(medianT, medianPoint); continue; } prevT = nextT; prevPoint = nextPoint; } return new PolyLine2d(result.values().iterator()); |
File | Line |
---|---|
org/djutils/draw/line/PolyLine2d.java | 716 |
org/djutils/draw/line/PolyLine3d.java | 702 |
result = new Ray2d(getLocation(0.0)).projectOrthogonalFractionalExtended(point); if (null == limitHandling) { return result == 0.0 ? 0.0 : Double.NaN; } // limitHandling is false if (result == 0.0) { return 0.0; } return result > 0 ? Double.POSITIVE_INFINITY : Double.NEGATIVE_INFINITY; } double bestDistance = Double.POSITIVE_INFINITY; double bestDistanceExtended = Double.POSITIVE_INFINITY; for (int index = 1; index < this.size(); index++) { double fraction = point.fractionalPositionOnLine(this.x[index - 1], this.y[index - 1], this.x[index], this.y[index], |
File | Line |
---|---|
org/djutils/draw/line/PolyLine2d.java | 850 |
org/djutils/draw/line/PolyLine3d.java | 840 |
Point2d toPoint = get(index); segmentLength = fromPoint.distance(toPoint); cumulativeLength = nextCumulativeLength; nextCumulativeLength = cumulativeLength + segmentLength; if (nextCumulativeLength >= start) { break; } } if (start == nextCumulativeLength) { pointList.add(get(index)); } else { pointList.add(get(index - 1).interpolate(get(index), (start - cumulativeLength) / segmentLength)); if (end > nextCumulativeLength) { pointList.add(get(index)); } } while (end > nextCumulativeLength) { |
File | Line |
---|---|
org/djutils/draw/line/Polygon2d.java | 190 |
org/djutils/draw/line/Polygon3d.java | 189 |
if (firstPoint.x == lastPoint.x && firstPoint.y == lastPoint.y) { if (doNotModifyList) { result = new ArrayList<>(points.size() - 1); for (int i = 0; i < points.size() - 1; i++) { result.add(points.get(i)); } } else { result.remove(points.size() - 1); } lastPoint = result.get(result.size() - 1); } Throw.when(firstPoint.x == lastPoint.x && firstPoint.y == lastPoint.y, IllegalArgumentException.class, |
File | Line |
---|---|
org/djutils/draw/curve/Flattener2d.java | 272 |
org/djutils/draw/curve/Flattener3d.java | 284 |
Map<Double, Double> directions = new LinkedHashMap<>(); directions.put(0.0, curve.getDirection(0.0)); // directions can't do ULP before 0.0 Set<Double> knots = new HashSet<>(); for (double knot : result.keySet()) { if (knot > 0) { directions.put(knot, curve.getDirection(knot - Math.ulp(knot))); } if (knot != 0.0 && knot != 1.0) { knots.add(knot); } } // Walk along all point pairs and see if additional points need to be inserted double prevT = result.firstKey(); |
File | Line |
---|---|
org/djutils/draw/curve/Flattener2d.java | 222 |
org/djutils/draw/curve/Flattener3d.java | 234 |
+ "around the same point (t=%f). Likely there is an (unreported) knot in the Curve2d.", medianT); continue; } iterationsAtSinglePoint = 0; if (prevPoint.distance(nextPoint) > this.maxDeviation && checkInflectionPoint(curve, prevT, medianT, nextT, prevPoint, nextPoint)) { // There is an inflection point, inserting the halfway point should take care of this result.put(medianT, medianPoint); directions.put(medianT, curve.getDirection(medianT)); continue; } prevT = nextT; prevPoint = nextPoint; if (knots.contains(prevT)) { directions.put(prevT, curve.getDirection(prevT + Math.ulp(prevT))); } } return new PolyLine2d(result.values().iterator()); |