CPD Results
The following document contains the results of PMD's CPD 7.7.0.
Duplications
| File | Line |
|---|---|
| org/djutils/draw/curve/OffsetFlattener2d.java | 254 |
| org/djutils/draw/curve/OffsetFlattener2d.java | 350 |
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 | 1158 |
| org/djutils/draw/line/PolyLine3d.java | 971 |
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 | 722 |
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 | 367 |
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 | 701 |
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 | 838 |
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 | 190 |
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()); | |
