Search in sources :

Example 1 with Show

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);
}
Also used : CollisionResult(com.jme3.collision.CollisionResult) Ray(com.jme3.math.Ray) IOException(java.io.IOException) BufferedImage(java.awt.image.BufferedImage) Point2d(javax.vecmath.Point2d) CollisionResults(com.jme3.collision.CollisionResults) WritableRaster(java.awt.image.WritableRaster) Show(org.twak.utils.ui.Show) File(java.io.File)

Aggregations

CollisionResult (com.jme3.collision.CollisionResult)1 CollisionResults (com.jme3.collision.CollisionResults)1 Ray (com.jme3.math.Ray)1 BufferedImage (java.awt.image.BufferedImage)1 WritableRaster (java.awt.image.WritableRaster)1 File (java.io.File)1 IOException (java.io.IOException)1 Point2d (javax.vecmath.Point2d)1 Show (org.twak.utils.ui.Show)1