use of org.twak.utils.ui.Show in project chordatlas by twak.
the class CompareGens method go.
private void go(SkelGen skelGen, BlockGen blockGen) {
LoopL<Point2d> pts = Loopz.toXZLoop(blockGen.polies);
double[] minMax = Loopz.minMax2d(pts);
double skirt = 20;
minMax[0] -= skirt;
minMax[1] += skirt;
minMax[2] -= skirt;
minMax[3] += skirt;
double sample = 0.25;
int xMin = (int) (minMax[0] / sample), yMin = (int) (minMax[2] / sample), xRange = (int) Math.ceil(minMax[1] / sample) - xMin, yRange = (int) Math.ceil(minMax[3] / sample) - yMin;
double[][] dists = new double[xRange][yRange];
double minD = Double.MAX_VALUE, maxD = -Double.MAX_VALUE;
double mse = 0;
int ptCount = 0;
for (int xi = 0; xi < xRange; xi++) {
System.out.println(xi + "/" + xRange);
for (int yi = 0; yi < yRange; yi++) {
double x = (xi + xMin) * sample;
double y = (yi + yMin) * sample;
Point2d p2d = new Point2d(x, y);
CollisionResults resultsB = new CollisionResults();
blockGen.gNode.collideWith(new Ray(Jme3z.toJmeV(x, 0, y), Jme3z.UP), resultsB);
CollisionResult crB = resultsB.getFarthestCollision();
CollisionResults resultsS = new CollisionResults();
skelGen.gNode.collideWith(new Ray(Jme3z.toJmeV(x, 0, y), Jme3z.UP), resultsS);
CollisionResult crS = resultsS.getFarthestCollision();
if (crB != null && crS != null) {
double dist = Math.abs(crB.getDistance() - crS.getDistance());
minD = Math.min(minD, dist);
maxD = Math.max(maxD, dist);
dists[xi][yi] = dist;
mse += dist * dist;
ptCount++;
} else
dists[xi][yi] = Double.NaN;
}
}
BufferedImage render = new BufferedImage(xRange, yRange, BufferedImage.TYPE_3BYTE_BGR);
WritableRaster raster = render.getRaster();
for (int xi = 0; xi < xRange; xi++) for (int yi = 0; yi < yRange; yi++) {
double d = dists[xi][yi];
if (Double.isNaN(d))
raster.setPixel(xi, yi, new int[] { 0, 0, 0 });
else {
d = (d - minD) / (maxD - minD);
raster.setPixel(xi, yi, colourMap(d));
}
}
double range = 150;
for (int y = 0; y < range; y++) {
for (int x = 0; x < 5; x++) raster.setPixel(x, y, colourMap(y / range));
}
try {
ImageIO.write(render, "png", new File(Tweed.SCRATCH + "distanceMap"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("min : " + minD + "max : " + maxD + " mse: " + (mse / ptCount));
new Show(render);
}
Aggregations