From 00a3f2a25e63d0f7ad4c57cd25df441bfe30a8f9 Mon Sep 17 00:00:00 2001 From: Justin Kunimune Date: Wed, 24 Jan 2018 19:05:50 -1000 Subject: [PATCH] Revert "Angles vs factors" This reverts commit ed297dbd079f3cc1ce93cd3aeb2cd98a60be7351. --- output/graph - plotter.png | Bin 48693 -> 47455 bytes src/apps/MapAnalyzer.java | 44 ++++++++++++++++++----------------- src/apps/MapApplication.java | 6 ++--- src/apps/MapPlotter.java | 13 +++++++---- src/maps/Azimuthal.java | 2 +- src/maps/Projection.java | 5 ++-- src/utils/Math2.java | 5 ---- 7 files changed, 37 insertions(+), 38 deletions(-) diff --git a/output/graph - plotter.png b/output/graph - plotter.png index 28e616706d48fe89c5509f316144a72f7edc116b..3d569c7be323acbc6b856db8bb243198b2f148ad 100644 GIT binary patch literal 47455 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 literal 48693 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 CategoryAxis(), new NumberAxis()); this.shapeChart.setPrefWidth(CHART_WIDTH); this.shapeChart.setPrefHeight(IMG_WIDTH/2); - this.shapeChart.getXAxis().setLabel("Angle displacement"); + this.shapeChart.getXAxis().setLabel("Stretch factor"); this.shapeChart.setBarGap(0); this.shapeChart.setCategoryGap(0); this.shapeChart.setAnimated(false); @@ -189,8 +190,8 @@ public class MapAnalyzer extends MapApplication { sizeChart.getData().clear(); shapeChart.getData().clear(); - avgSizeDistort.setText("\u2026"); - avgShapeDistort.setText("\u2026"); + avgSizeDistort.setText("..."); + avgShapeDistort.setText("..."); }); loadParameters(); @@ -204,13 +205,13 @@ public class MapAnalyzer extends MapApplication { final double[][][] distortionG = proj.calculateDistortion(Projection.globe(GLOBE_RES)); Platform.runLater(() -> { - sizeChart.getData().add(histogram(distortionG[0], -LN_10, LN_10, 20, - (x) -> Double.toString(Math.round(100*Math.exp(x))/100.))); - shapeChart.getData().add(histogram(distortionG[1], 0.0, Math.PI/2, 18, - (x) -> Integer.toString((int) Math.toDegrees(x))+"\u00B0")); + sizeChart.getData().add(histogram(distortionG[0], + -LN_10, LN_10, 20, Math::exp)); + shapeChart.getData().add(histogram(distortionG[1], + 0.0, LN_10, 20, Math::exp)); - avgSizeDistort.setText(format(Math2.toDecibels(Math2.stdDev(distortionG[0])))+"dB"); - avgShapeDistort.setText(format(Math.toDegrees(Math2.mean(distortionG[1])))+"\u00B0"); + avgSizeDistort.setText(format(Math2.stdDev(distortionG[0])/LN_10*10)); + avgShapeDistort.setText(format(Math2.mean(distortionG[1])/LN_10*10)); enable(ButtonType.UPDATE_MAP, ButtonType.SAVE_GRAPH); }); @@ -270,7 +271,7 @@ public class MapAnalyzer extends MapApplication { for (int x = 0; x < distortion[0][y].length; x ++) { final double sizeDistort = distortion[0][y][x], shapeDistort = distortion[1][y][x]; final double sizeContour = Math.round(sizeDistort/(LN_10/10))*LN_10/10; //contour the size by decibels - final double shapeContour = Math.round(shapeDistort/(Math.PI/36))*Math.PI/36; //contour the size by semidecibels + final double shapeContour = Math.round(shapeDistort/(LN_10/20))*LN_10/20; //contour the size by semidecibels if (Double.isNaN(sizeDistort) || Double.isNaN(shapeDistort)) { writer.setArgb(x, y, 0); continue; @@ -278,14 +279,14 @@ public class MapAnalyzer extends MapApplication { final int r, g, b; if (sizeDistort < 0) { //if compressing - r = (int)(255.9*(1-shapeContour/(Math.PI/2))); - g = (int)(255.9*(1-shapeContour/(Math.PI/2))*Math.exp(sizeContour*.6)); + r = (int)(255.9*Math.exp(-shapeContour*.6)); + g = (int)(255.9*Math.exp(-shapeContour*.6)*Math.exp(sizeContour*.6)); b = g; } else { //if dilating - r = (int)(255.9*(1-shapeContour/(Math.PI/2))*Math.exp(-sizeContour*.6)); + r = (int)(255.9*Math.exp(-shapeContour*.6)*Math.exp(-sizeContour*.6)); g = r; //I find .6 to be a rather visually pleasing sensitivity - b = (int)(255.9*(1-shapeContour/(Math.PI/2))); + b = (int)(255.9*Math.exp(-shapeContour*.6)); } final int argb = ((((((0xFF)<<8)+r)<<8)+g)<<8)+b; @@ -297,7 +298,7 @@ public class MapAnalyzer extends MapApplication { private static final Series histogram(double[][] values, - double min, double max, int num, DoubleFunction converter) { + double min, double max, int num, DoubleUnaryOperator converter) { int[] hist = new int[num+1]; //this array is the histogram values for min, min+dx, ..., max-dx, max int tot = 0; for (double[] row: values) { @@ -312,8 +313,9 @@ public class MapAnalyzer extends MapApplication { } Series output = new Series(); for (int i = 0; i <= num; i ++) { + double x = converter.applyAsDouble(i*(max-min)/num+min); output.getData().add(new Data( - converter.apply(i*(max-min)/num+min), + Double.toString(Math.round(100*x)/100.), (double)hist[i]/tot*100)); } return output; diff --git a/src/apps/MapApplication.java b/src/apps/MapApplication.java index 3b105e0..f12c7ce 100644 --- a/src/apps/MapApplication.java +++ b/src/apps/MapApplication.java @@ -42,6 +42,7 @@ import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Pos; +import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; @@ -68,7 +69,6 @@ import javafx.scene.layout.Priority; import javafx.scene.layout.Region; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; -import javafx.scene.paint.Color; import javafx.scene.text.Text; import javafx.stage.FileChooser; import javafx.stage.Stage; @@ -183,7 +183,7 @@ public abstract class MapApplication extends Application { public void start(Stage root) { this.root = root; this.root.setTitle(this.name); - this.root.setScene(new Scene(new StackPane(makeWidgets()), Color.ANTIQUEWHITE)); //Why can't I set this color? + this.root.setScene(new Scene(new StackPane(makeWidgets()))); this.root.show(); this.suppressListeners.set(); @@ -192,7 +192,7 @@ public abstract class MapApplication extends Application { } - protected abstract Region makeWidgets(); + protected abstract Node makeWidgets(); /** diff --git a/src/apps/MapPlotter.java b/src/apps/MapPlotter.java index 91edc8c..55a4bfb 100644 --- a/src/apps/MapPlotter.java +++ b/src/apps/MapPlotter.java @@ -47,18 +47,19 @@ import javafx.scene.control.Label; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.StackPane; import javafx.stage.Stage; -import maps.Arbitrary; import maps.Azimuthal; import maps.CahillKeyes; import maps.Cylindrical; import maps.Lenticular; import maps.Misc; -import maps.Polyhedral; +import maps.MyProjections; import maps.Projection; import maps.Pseudocylindrical; +import maps.Arbitrary; +import maps.Polyhedral; import maps.Tobler; +import maps.Waterman; import maps.WinkelTripel; -import utils.Math2; /** * A simple script that creates an annotated ScatterPlot of map projections @@ -66,6 +67,8 @@ import utils.Math2; * @author jkunimune */ public class MapPlotter extends Application { + + private static final double DECIBEL = Math.log(10)/10; private static final double GLOBE_RES = .005; @@ -98,7 +101,7 @@ public class MapPlotter extends Application { final ScatterChart plot = new ScatterChart( new NumberAxis("Size distortion", 0, 4, .5), - new NumberAxis("Shape distortion", 0, 20, 5)); + new NumberAxis("Shape distortion", 0, 3, .5)); plot.setLegendSide(Side.RIGHT); final AnchorPane overlay = new AnchorPane(); stack = new StackPane(plot, overlay); @@ -149,7 +152,7 @@ public class MapPlotter extends Application { final double[] params = projection.getDefaultParameters(); final double distortion[] = projection.avgDistortion(points, params); final Data datum = new Data( - Math2.toDecibels(distortion[0]), Math.toDegrees(distortion[1])); + distortion[0]/DECIBEL, distortion[1]/DECIBEL); series.getData().add(datum); final Label lbl = new Label(projection.getName()); overlay.getChildren().add(lbl); diff --git a/src/maps/Azimuthal.java b/src/maps/Azimuthal.java index c558097..5142a82 100644 --- a/src/maps/Azimuthal.java +++ b/src/maps/Azimuthal.java @@ -90,7 +90,7 @@ public class Azimuthal { 4, 4, 0b0111, Type.AZIMUTHAL, Property.GNOMONIC, 2) { public double[] project(double lat, double lon) { - if (lat < 0.01) lat = 0.01; + if (lat < 0.2) lat = 0.2; final double r = Math.tan(Math.PI/2 - lat); return new double[] { r*Math.sin(lon), -r*Math.cos(lon)}; } diff --git a/src/maps/Projection.java b/src/maps/Projection.java index 63aca46..b3b17ee 100644 --- a/src/maps/Projection.java +++ b/src/maps/Projection.java @@ -367,9 +367,8 @@ public abstract class Projection { final double s1ps2 = Math.hypot((pE[0]-pC[0])+(pN[1]-pC[1]), (pE[1]-pC[1])-(pN[0]-pC[0])); final double s1ms2 = Math.hypot((pE[0]-pC[0])-(pN[1]-pC[1]), (pE[1]-pC[1])+(pN[0]-pC[0])); - final double sig = Math.abs((s1ps2+s1ms2)/(s1ps2-s1ms2)); - output[1] = Math.atan((sig - 1)/Math.sqrt(sig)/2); //the first output is the shape (angle) distortion - if (sig > 1e10) + output[1] = Math.abs(Math.log(Math.abs((s1ps2-s1ms2)/(s1ps2+s1ms2)))); //the first output is the shape (angle) distortion + if (Math.abs(output[1]) > 25) output[1] = Double.NaN; //discard outliers return output; diff --git a/src/utils/Math2.java b/src/utils/Math2.java index d2d6757..36a51f9 100644 --- a/src/utils/Math2.java +++ b/src/utils/Math2.java @@ -171,11 +171,6 @@ public class Math2 { } - public static double toDecibels(double ratio) { - return ratio/Math.log(10)*10; - } - - public static double sind(double angdeg) { return Math.sin(Math.toRadians(angdeg)); }