49 lines
1.8 KiB
Java
49 lines
1.8 KiB
Java
package com.cringe_studios.christmastreescanning;
|
|
|
|
import java.awt.geom.Point2D;
|
|
|
|
import com.cringe_studios.christmastreescanning.scanning.PointInterpolator;
|
|
|
|
public class Homograph4 implements Homograph{
|
|
// Homograph 4 simplifies the code by first merging back and front side, as well as right and left side together. This step isn't perfect though, because the scanned images are not perfect.
|
|
private Homograph2 internalHomograph;
|
|
|
|
public Homograph4(Point2D[] frontSidePoints, Point2D[] rightSidePoints, Point2D[] behindSidePoints, Point2D[] leftSidePoints) {
|
|
Point2D[] mergedFrontBack = new Point2D[frontSidePoints.length];
|
|
Point2D[] mergedRightLeft = new Point2D[frontSidePoints.length];
|
|
|
|
Point2D[] flippedBehindSide = new Point2D[frontSidePoints.length];
|
|
Point2D[] flippedLeftSide = new Point2D[frontSidePoints.length];
|
|
|
|
for(int i = 0; i < frontSidePoints.length; i++) {
|
|
// the x coordinate goes from -1 to 1 after normalization
|
|
flippedBehindSide[i] = new Point2D.Double(behindSidePoints[i].getX() * -1.0, behindSidePoints[i].getY());
|
|
flippedLeftSide[i] = new Point2D.Double(leftSidePoints[i].getX() * -1.0, leftSidePoints[i].getY());
|
|
}
|
|
|
|
|
|
for(int i = 0; i < frontSidePoints.length; i++) {
|
|
Point2D interpolatedFrontBehind = new PointInterpolator(frontSidePoints[i], flippedBehindSide[i]).getCenter();
|
|
Point2D interpolatedRightLeft = new PointInterpolator(rightSidePoints[i], leftSidePoints[i]).getCenter();
|
|
|
|
mergedFrontBack[i] = interpolatedFrontBehind;
|
|
mergedRightLeft[i] = interpolatedRightLeft;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void merge() {
|
|
internalHomograph.merge();
|
|
}
|
|
|
|
@Override
|
|
public void renormalize() {
|
|
internalHomograph.renormalize();
|
|
}
|
|
|
|
@Override
|
|
public Point3D[] getPoints() {
|
|
return internalHomograph.getPoints();
|
|
}
|
|
}
|