You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2020/02/18 16:21:06 UTC
[commons-math] branch master updated: Update userguide code
examples.
This is an automated email from the ASF dual-hosted git repository.
erans pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-math.git
The following commit(s) were added to refs/heads/master by this push:
new 4d5983a Update userguide code examples.
4d5983a is described below
commit 4d5983aa8756c99cdd20618aecf24ea31c399311
Author: Gilles Sadowski <gi...@harfang.homelinux.org>
AuthorDate: Tue Feb 18 17:18:00 2020 +0100
Update userguide code examples.
---
pom.xml | 2 +-
.../userguide/ClusterAlgorithmComparison.java | 54 ++++++++--------
.../userguide/IntegerDistributionComparison.java | 32 +++++-----
.../LowDiscrepancyGeneratorComparison.java | 44 +++++++-------
.../userguide/RealDistributionComparison.java | 38 ++++++------
.../math4/userguide/geometry/GeometryExample.java | 65 ++++++++++----------
.../commons/math4/userguide/sofm/ChineseRings.java | 71 +++++++++++-----------
.../userguide/sofm/ChineseRingsClassifier.java | 10 +--
src/userguide/pom.xml | 27 +++++++-
9 files changed, 184 insertions(+), 159 deletions(-)
diff --git a/pom.xml b/pom.xml
index 8c5a3ef..353b325 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.apache.commons</groupId>
<artifactId>commons-parent</artifactId>
- <version>49</version>
+ <version>50</version>
</parent>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math4</artifactId>
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/ClusterAlgorithmComparison.java b/src/userguide/java/org/apache/commons/math4/userguide/ClusterAlgorithmComparison.java
index 3c5ddd1..bb05047 100644
--- a/src/userguide/java/org/apache/commons/math4/userguide/ClusterAlgorithmComparison.java
+++ b/src/userguide/java/org/apache/commons/math4/userguide/ClusterAlgorithmComparison.java
@@ -36,11 +36,11 @@ import javax.swing.JLabel;
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
import org.apache.commons.rng.sampling.ListSampler;
+import org.apache.commons.statistics.distribution.ContinuousDistribution;
+import org.apache.commons.statistics.distribution.UniformContinuousDistribution;
+import org.apache.commons.statistics.distribution.NormalDistribution;
+import org.apache.commons.geometry.euclidean.twod.Vector2D;
-import org.apache.commons.math4.distribution.RealDistribution;
-import org.apache.commons.math4.distribution.UniformRealDistribution;
-import org.apache.commons.math4.distribution.NormalDistribution;
-import org.apache.commons.math4.geometry.euclidean.twod.Cartesian2D;
import org.apache.commons.math4.ml.clustering.CentroidCluster;
import org.apache.commons.math4.ml.clustering.Cluster;
import org.apache.commons.math4.ml.clustering.Clusterable;
@@ -61,7 +61,7 @@ import org.apache.commons.math4.userguide.ExampleUtils.ExampleFrame;
*/
public class ClusterAlgorithmComparison {
- public static List<Cartesian2D> makeCircles(int samples,
+ public static List<Vector2D> makeCircles(int samples,
boolean shuffle,
double noise,
double factor,
@@ -70,14 +70,14 @@ public class ClusterAlgorithmComparison {
throw new IllegalArgumentException();
}
- RealDistribution.Sampler dist = new NormalDistribution(0.0, noise).createSampler(rng);
+ ContinuousDistribution.Sampler dist = new NormalDistribution(0.0, noise).createSampler(rng);
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
+ List<Vector2D> points = new ArrayList<>();
double range = 2.0 * FastMath.PI;
double step = range / (samples / 2.0 + 1);
for (double angle = 0; angle < range; angle += step) {
- Cartesian2D outerCircle = new Cartesian2D(FastMath.cos(angle), FastMath.sin(angle));
- Cartesian2D innerCircle = outerCircle.scalarMultiply(factor);
+ Vector2D outerCircle = Vector2D.of(FastMath.cos(angle), FastMath.sin(angle));
+ Vector2D innerCircle = outerCircle.multiply(factor);
points.add(outerCircle.add(generateNoiseVector(dist)));
points.add(innerCircle.add(generateNoiseVector(dist)));
@@ -90,26 +90,26 @@ public class ClusterAlgorithmComparison {
return points;
}
- public static List<Cartesian2D> makeMoons(int samples,
+ public static List<Vector2D> makeMoons(int samples,
boolean shuffle,
double noise,
UniformRandomProvider rng) {
- RealDistribution.Sampler dist = new NormalDistribution(0.0, noise).createSampler(rng);
+ ContinuousDistribution.Sampler dist = new NormalDistribution(0.0, noise).createSampler(rng);
int nSamplesOut = samples / 2;
int nSamplesIn = samples - nSamplesOut;
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
+ List<Vector2D> points = new ArrayList<>();
double range = FastMath.PI;
double step = range / (nSamplesOut / 2.0);
for (double angle = 0; angle < range; angle += step) {
- Cartesian2D outerCircle = new Cartesian2D(FastMath.cos(angle), FastMath.sin(angle));
+ Vector2D outerCircle = Vector2D.of(FastMath.cos(angle), FastMath.sin(angle));
points.add(outerCircle.add(generateNoiseVector(dist)));
}
step = range / (nSamplesIn / 2.0);
for (double angle = 0; angle < range; angle += step) {
- Cartesian2D innerCircle = new Cartesian2D(1 - FastMath.cos(angle), 1 - FastMath.sin(angle) - 0.5);
+ Vector2D innerCircle = Vector2D.of(1 - FastMath.cos(angle), 1 - FastMath.sin(angle) - 0.5);
points.add(innerCircle.add(generateNoiseVector(dist)));
}
@@ -120,19 +120,19 @@ public class ClusterAlgorithmComparison {
return points;
}
- public static List<Cartesian2D> makeBlobs(int samples,
+ public static List<Vector2D> makeBlobs(int samples,
int centers,
double clusterStd,
double min,
double max,
boolean shuffle,
UniformRandomProvider rng) {
- RealDistribution.Sampler uniform = new UniformRealDistribution(min, max).createSampler(rng);
- RealDistribution.Sampler gauss = new NormalDistribution(0.0, clusterStd).createSampler(rng);
+ ContinuousDistribution.Sampler uniform = new UniformContinuousDistribution(min, max).createSampler(rng);
+ ContinuousDistribution.Sampler gauss = new NormalDistribution(0.0, clusterStd).createSampler(rng);
- Cartesian2D[] centerPoints = new Cartesian2D[centers];
+ Vector2D[] centerPoints = new Vector2D[centers];
for (int i = 0; i < centers; i++) {
- centerPoints[i] = new Cartesian2D(uniform.sample(), uniform.sample());
+ centerPoints[i] = Vector2D.of(uniform.sample(), uniform.sample());
}
int[] nSamplesPerCenter = new int[centers];
@@ -143,7 +143,7 @@ public class ClusterAlgorithmComparison {
nSamplesPerCenter[i]++;
}
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
+ List<Vector2D> points = new ArrayList<>();
for (int i = 0; i < centers; i++) {
for (int j = 0; j < nSamplesPerCenter[i]; j++) {
points.add(centerPoints[i].add(generateNoiseVector(gauss)));
@@ -157,26 +157,26 @@ public class ClusterAlgorithmComparison {
return points;
}
- public static List<Cartesian2D> makeRandom(int samples) {
+ public static List<Vector2D> makeRandom(int samples) {
SobolSequenceGenerator generator = new SobolSequenceGenerator(2);
generator.skipTo(999999);
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
+ List<Vector2D> points = new ArrayList<>();
for (double i = 0; i < samples; i++) {
double[] vector = generator.nextVector();
vector[0] = vector[0] * 2 - 1;
vector[1] = vector[1] * 2 - 1;
- Cartesian2D point = new Cartesian2D(vector);
+ Vector2D point = Vector2D.of(vector);
points.add(point);
}
return points;
}
- public static Cartesian2D generateNoiseVector(RealDistribution.Sampler distribution) {
- return new Cartesian2D(distribution.sample(), distribution.sample());
+ public static Vector2D generateNoiseVector(ContinuousDistribution.Sampler distribution) {
+ return Vector2D.of(distribution.sample(), distribution.sample());
}
- public static List<DoublePoint> normalize(final List<Cartesian2D> input,
+ public static List<DoublePoint> normalize(final List<Vector2D> input,
double minX,
double maxX,
double minY,
@@ -184,7 +184,7 @@ public class ClusterAlgorithmComparison {
double rangeX = maxX - minX;
double rangeY = maxY - minY;
List<DoublePoint> points = new ArrayList<DoublePoint>();
- for (Cartesian2D p : input) {
+ for (Vector2D p : input) {
double[] arr = p.toArray();
arr[0] = (arr[0] - minX) / rangeX * 2 - 1;
arr[1] = (arr[1] - minY) / rangeY * 2 - 1;
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/IntegerDistributionComparison.java b/src/userguide/java/org/apache/commons/math4/userguide/IntegerDistributionComparison.java
index 5867aed..74a5cb6 100644
--- a/src/userguide/java/org/apache/commons/math4/userguide/IntegerDistributionComparison.java
+++ b/src/userguide/java/org/apache/commons/math4/userguide/IntegerDistributionComparison.java
@@ -33,14 +33,14 @@ import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
-import org.apache.commons.math4.distribution.BinomialDistribution;
-import org.apache.commons.math4.distribution.GeometricDistribution;
-import org.apache.commons.math4.distribution.HypergeometricDistribution;
-import org.apache.commons.math4.distribution.IntegerDistribution;
-import org.apache.commons.math4.distribution.PascalDistribution;
-import org.apache.commons.math4.distribution.PoissonDistribution;
-import org.apache.commons.math4.distribution.UniformIntegerDistribution;
-import org.apache.commons.math4.distribution.ZipfDistribution;
+import org.apache.commons.statistics.distribution.BinomialDistribution;
+import org.apache.commons.statistics.distribution.GeometricDistribution;
+import org.apache.commons.statistics.distribution.HypergeometricDistribution;
+import org.apache.commons.statistics.distribution.DiscreteDistribution;
+import org.apache.commons.statistics.distribution.PascalDistribution;
+import org.apache.commons.statistics.distribution.PoissonDistribution;
+import org.apache.commons.statistics.distribution.UniformDiscreteDistribution;
+import org.apache.commons.statistics.distribution.ZipfDistribution;
import org.apache.commons.math4.userguide.ExampleUtils.ExampleFrame;
import com.xeiam.xchart.Chart;
@@ -56,7 +56,7 @@ import com.xeiam.xchart.XChartPanel;
*/
public class IntegerDistributionComparison {
- public static void addPDFSeries(Chart chart, IntegerDistribution distribution, String desc, int lowerBound, int upperBound) {
+ public static void addPDFSeries(Chart chart, DiscreteDistribution distribution, String desc, int lowerBound, int upperBound) {
// generates Log data
List<Number> xData = new ArrayList<Number>();
List<Number> yData = new ArrayList<Number>();
@@ -78,7 +78,7 @@ public class IntegerDistributionComparison {
series.setLineStyle(new BasicStroke(1.2f));
}
- public static void addCDFSeries(Chart chart, IntegerDistribution distribution, String desc,
+ public static void addCDFSeries(Chart chart, DiscreteDistribution distribution, String desc,
int lowerBound, int upperBound) {
// generates Log data
List<Number> xData = new ArrayList<Number>();
@@ -120,7 +120,7 @@ public class IntegerDistributionComparison {
}
public static JComponent createComponent(String distributionName, int minX, int maxX, String[] seriesText,
- IntegerDistribution... series) {
+ DiscreteDistribution... series) {
JComponent container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
@@ -128,14 +128,14 @@ public class IntegerDistributionComparison {
Chart chart = createChart("PDF", minX, maxX, LegendPosition.InsideNE);
int i = 0;
- for (IntegerDistribution d : series) {
+ for (DiscreteDistribution d : series) {
addPDFSeries(chart, d, seriesText[i++], minX, maxX);
}
container.add(new XChartPanel(chart));
chart = createChart("CDF", minX, maxX, LegendPosition.InsideSE);
i = 0;
- for (IntegerDistribution d : series) {
+ for (DiscreteDistribution d : series) {
addCDFSeries(chart, d, seriesText[i++], minX, maxX);
}
container.add(new XChartPanel(chart));
@@ -207,9 +207,9 @@ public class IntegerDistributionComparison {
c.gridx++;
comp = createComponent("Uniform", 0, 30,
new String[] { "l=1,u=10", "l=5,u=20", "l=1,u=25" },
- new UniformIntegerDistribution(1, 10),
- new UniformIntegerDistribution(5, 20),
- new UniformIntegerDistribution(1, 25));
+ new UniformDiscreteDistribution(1, 10),
+ new UniformDiscreteDistribution(5, 20),
+ new UniformDiscreteDistribution(1, 25));
container.add(comp, c);
c.gridx++;
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/LowDiscrepancyGeneratorComparison.java b/src/userguide/java/org/apache/commons/math4/userguide/LowDiscrepancyGeneratorComparison.java
index 12b3be3..9404d5b 100644
--- a/src/userguide/java/org/apache/commons/math4/userguide/LowDiscrepancyGeneratorComparison.java
+++ b/src/userguide/java/org/apache/commons/math4/userguide/LowDiscrepancyGeneratorComparison.java
@@ -35,7 +35,7 @@ import javax.swing.JTextArea;
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
-import org.apache.commons.math4.geometry.euclidean.twod.Cartesian2D;
+import org.apache.commons.geometry.euclidean.twod.Vector2D;
import org.apache.commons.math4.random.HaltonSequenceGenerator;
import org.apache.commons.math4.random.RandomVectorGenerator;
import org.apache.commons.math4.random.SobolSequenceGenerator;
@@ -50,11 +50,11 @@ import org.apache.commons.math4.userguide.ExampleUtils.ExampleFrame;
*/
public class LowDiscrepancyGeneratorComparison {
- public static List<Cartesian2D> makeCircle(int samples, final RandomVectorGenerator generator) {
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
+ public static List<Vector2D> makeCircle(int samples, final RandomVectorGenerator generator) {
+ List<Vector2D> points = new ArrayList<>();
for (double i = 0; i < samples; i++) {
double[] vector = generator.nextVector();
- Cartesian2D point = new Cartesian2D(vector);
+ Vector2D point = Vector2D.of(vector);
points.add(point);
}
@@ -62,8 +62,8 @@ public class LowDiscrepancyGeneratorComparison {
points = normalize(points);
// now test if the sample is within the unit circle
- List<Cartesian2D> circlePoints = new ArrayList<Cartesian2D>();
- for (Cartesian2D p : points) {
+ List<Vector2D> circlePoints = new ArrayList<>();
+ for (Vector2D p : points) {
double criteria = FastMath.pow(p.getX(), 2) + FastMath.pow(p.getY(), 2);
if (criteria < 1.0) {
circlePoints.add(p);
@@ -73,22 +73,22 @@ public class LowDiscrepancyGeneratorComparison {
return circlePoints;
}
- public static List<Cartesian2D> makeRandom(int samples, RandomVectorGenerator generator) {
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
+ public static List<Vector2D> makeRandom(int samples, RandomVectorGenerator generator) {
+ List<Vector2D> points = new ArrayList<>();
for (double i = 0; i < samples; i++) {
double[] vector = generator.nextVector();
- Cartesian2D point = new Cartesian2D(vector);
+ Vector2D point = Vector2D.of(vector);
points.add(point);
}
return normalize(points);
}
- public static List<Cartesian2D> normalize(final List<Cartesian2D> input) {
+ public static List<Vector2D> normalize(final List<Vector2D> input) {
// find the mininum and maximum x value in the dataset
double minX = Double.MAX_VALUE;
double maxX = Double.MIN_VALUE;
- for (Cartesian2D p : input) {
+ for (Vector2D p : input) {
minX = FastMath.min(minX, p.getX());
maxX = FastMath.max(maxX, p.getX());
}
@@ -106,13 +106,13 @@ public class LowDiscrepancyGeneratorComparison {
double rangeX = maxX - minX;
double rangeY = maxY - minY;
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
- for (Cartesian2D p : input) {
+ List<Vector2D> points = new ArrayList<>();
+ for (Vector2D p : input) {
double[] arr = p.toArray();
// normalize to the range [-1, 1]
arr[0] = (arr[0] - minX) / rangeX * 2 - 1;
arr[1] = (arr[1] - minY) / rangeY * 2 - 1;
- points.add(new Cartesian2D(arr));
+ points.add(Vector2D.of(arr));
}
return points;
}
@@ -177,7 +177,7 @@ public class LowDiscrepancyGeneratorComparison {
c.gridx = 1;
for (Pair<String, RandomVectorGenerator> pair : generators) {
- List<Cartesian2D> points = null;
+ List<Vector2D> points = null;
int samples = datasets[type];
switch (type) {
case 0:
@@ -207,9 +207,9 @@ public class LowDiscrepancyGeneratorComparison {
private static double PAD = 10;
- private List<Cartesian2D> points;
+ private List<Vector2D> points;
- public Plot(final List<Cartesian2D> points) {
+ public Plot(final List<Vector2D> points) {
this.points = points;
}
@@ -228,8 +228,8 @@ public class LowDiscrepancyGeneratorComparison {
g2.setPaint(Color.black);
g2.drawRect(0, 0, w - 1, h - 1);
- for (Cartesian2D point : points) {
- Cartesian2D p = transform(point, w, h);
+ for (Vector2D point : points) {
+ Vector2D p = transform(point, w, h);
double[] arr = p.toArray();
g2.draw(new Rectangle2D.Double(arr[0] - 1, arr[1] - 1, 2, 2));
}
@@ -240,10 +240,10 @@ public class LowDiscrepancyGeneratorComparison {
return new Dimension(140, 140);
}
- private Cartesian2D transform(Cartesian2D point, int width, int height) {
+ private Vector2D transform(Vector2D point, int width, int height) {
double[] arr = point.toArray();
- return new Cartesian2D(new double[] { PAD + (arr[0] + 1) / 2.0 * (width - 2 * PAD),
- height - PAD - (arr[1] + 1) / 2.0 * (height - 2 * PAD) });
+ return Vector2D.of(PAD + (arr[0] + 1) / 2.0 * (width - 2 * PAD),
+ height - PAD - (arr[1] + 1) / 2.0 * (height - 2 * PAD));
}
}
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java b/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java
index 5d4e015..098c943 100644
--- a/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java
+++ b/src/userguide/java/org/apache/commons/math4/userguide/RealDistributionComparison.java
@@ -33,19 +33,19 @@ import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
-import org.apache.commons.math4.distribution.BetaDistribution;
-import org.apache.commons.math4.distribution.CauchyDistribution;
-import org.apache.commons.math4.distribution.ChiSquaredDistribution;
-import org.apache.commons.math4.distribution.ExponentialDistribution;
-import org.apache.commons.math4.distribution.FDistribution;
-import org.apache.commons.math4.distribution.GammaDistribution;
-import org.apache.commons.math4.distribution.LevyDistribution;
-import org.apache.commons.math4.distribution.LogNormalDistribution;
-import org.apache.commons.math4.distribution.NormalDistribution;
-import org.apache.commons.math4.distribution.ParetoDistribution;
-import org.apache.commons.math4.distribution.RealDistribution;
-import org.apache.commons.math4.distribution.TDistribution;
-import org.apache.commons.math4.distribution.WeibullDistribution;
+import org.apache.commons.statistics.distribution.BetaDistribution;
+import org.apache.commons.statistics.distribution.CauchyDistribution;
+import org.apache.commons.statistics.distribution.ChiSquaredDistribution;
+import org.apache.commons.statistics.distribution.ExponentialDistribution;
+import org.apache.commons.statistics.distribution.FDistribution;
+import org.apache.commons.statistics.distribution.GammaDistribution;
+import org.apache.commons.statistics.distribution.LevyDistribution;
+import org.apache.commons.statistics.distribution.LogNormalDistribution;
+import org.apache.commons.statistics.distribution.NormalDistribution;
+import org.apache.commons.statistics.distribution.ParetoDistribution;
+import org.apache.commons.statistics.distribution.ContinuousDistribution;
+import org.apache.commons.statistics.distribution.TDistribution;
+import org.apache.commons.statistics.distribution.WeibullDistribution;
import org.apache.commons.math4.util.FastMath;
import org.apache.commons.math4.userguide.ExampleUtils.ExampleFrame;
@@ -62,7 +62,7 @@ import com.xeiam.xchart.XChartPanel;
*/
public class RealDistributionComparison {
- public static void addPDFSeries(Chart chart, RealDistribution distribution, String desc, int lowerBound, int upperBound) {
+ public static void addPDFSeries(Chart chart, ContinuousDistribution distribution, String desc, int lowerBound, int upperBound) {
// generates Log data
List<Number> xData = new ArrayList<Number>();
List<Number> yData = new ArrayList<Number>();
@@ -86,7 +86,7 @@ public class RealDistributionComparison {
series.setLineStyle(new BasicStroke(1.2f));
}
- public static void addCDFSeries(Chart chart, RealDistribution distribution, String desc, int lowerBound, int upperBound) {
+ public static void addCDFSeries(Chart chart, ContinuousDistribution distribution, String desc, int lowerBound, int upperBound) {
// generates Log data
List<Number> xData = new ArrayList<Number>();
List<Number> yData = new ArrayList<Number>();
@@ -128,7 +128,7 @@ public class RealDistributionComparison {
return chart;
}
- public static JComponent createComponent(String distributionName, int minX, int maxX, String[] seriesText, RealDistribution... series) {
+ public static JComponent createComponent(String distributionName, int minX, int maxX, String[] seriesText, ContinuousDistribution... series) {
JComponent container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
@@ -136,14 +136,14 @@ public class RealDistributionComparison {
Chart chart = createChart("PDF", minX, maxX, LegendPosition.InsideNE);
int i = 0;
- for (RealDistribution d : series) {
+ for (ContinuousDistribution d : series) {
addPDFSeries(chart, d, seriesText[i++], minX, maxX);
}
container.add(new XChartPanel(chart));
chart = createChart("CDF", minX, maxX, LegendPosition.InsideSE);
i = 0;
- for (RealDistribution d : series) {
+ for (ContinuousDistribution d : series) {
addCDFSeries(chart, d, seriesText[i++], minX, maxX);
}
container.add(new XChartPanel(chart));
@@ -175,7 +175,7 @@ public class RealDistributionComparison {
comp = createComponent("Normal", -5, 5,
new String[] { "μ=0,σ\u00B2=0.2", "μ=0,σ\u00B2=1", "μ=0,σ\u00B2=5", "μ=-2,σ\u00B2=0.5" },
new NormalDistribution(0, FastMath.sqrt(0.2)),
- new NormalDistribution(),
+ new NormalDistribution(0, 1),
new NormalDistribution(0, FastMath.sqrt(5)),
new NormalDistribution(-2, FastMath.sqrt(0.5)));
container.add(comp, c);
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/geometry/GeometryExample.java b/src/userguide/java/org/apache/commons/math4/userguide/geometry/GeometryExample.java
index 4bbe7e6..8bdb1ab 100644
--- a/src/userguide/java/org/apache/commons/math4/userguide/geometry/GeometryExample.java
+++ b/src/userguide/java/org/apache/commons/math4/userguide/geometry/GeometryExample.java
@@ -31,19 +31,21 @@ import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
+
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
+import org.apache.commons.geometry.core.precision.EpsilonDoublePrecisionContext;
+import org.apache.commons.geometry.euclidean.twod.Segment;
+import org.apache.commons.geometry.euclidean.twod.Vector2D;
+import org.apache.commons.geometry.enclosing.Encloser;
+import org.apache.commons.geometry.enclosing.EnclosingBall;
+import org.apache.commons.geometry.enclosing.WelzlEncloser;
+import org.apache.commons.geometry.enclosing.euclidean.twod.DiskGenerator;
+import org.apache.commons.geometry.enclosing.euclidean.twod.WelzlEncloser2D;
+import org.apache.commons.geometry.hull.euclidean.twod.ConvexHull2D;
+import org.apache.commons.geometry.hull.euclidean.twod.ConvexHullGenerator2D;
+import org.apache.commons.geometry.hull.euclidean.twod.MonotoneChain;
-import org.apache.commons.math4.geometry.enclosing.Encloser;
-import org.apache.commons.math4.geometry.enclosing.EnclosingBall;
-import org.apache.commons.math4.geometry.enclosing.WelzlEncloser;
-import org.apache.commons.math4.geometry.euclidean.twod.DiskGenerator;
-import org.apache.commons.math4.geometry.euclidean.twod.Euclidean2D;
-import org.apache.commons.math4.geometry.euclidean.twod.Segment;
-import org.apache.commons.math4.geometry.euclidean.twod.Cartesian2D;
-import org.apache.commons.math4.geometry.euclidean.twod.hull.ConvexHull2D;
-import org.apache.commons.math4.geometry.euclidean.twod.hull.ConvexHullGenerator2D;
-import org.apache.commons.math4.geometry.euclidean.twod.hull.MonotoneChain;
import org.apache.commons.math4.util.FastMath;
import org.apache.commons.math4.userguide.ExampleUtils;
import org.apache.commons.math4.userguide.ExampleUtils.ExampleFrame;
@@ -65,39 +67,39 @@ import org.piccolo2d.nodes.PText;
*/
public class GeometryExample {
- public static List<Cartesian2D> createRandomPoints(int size) {
+ public static List<Vector2D> createRandomPoints(int size) {
final UniformRandomProvider random = RandomSource.create(RandomSource.MT);
// create the cloud container
- List<Cartesian2D> points = new ArrayList<Cartesian2D>(size);
+ List<Vector2D> points = new ArrayList<>(size);
// fill the cloud with a random distribution of points
for (int i = 0; i < size; i++) {
- points.add(new Cartesian2D(FastMath.round(random.nextDouble() * 400 + 100),
+ points.add(Vector2D.of(FastMath.round(random.nextDouble() * 400 + 100),
FastMath.round(random.nextDouble() * 400 + 100)));
}
return points;
}
- public static List<Cartesian2D> createCircle(int samples) {
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
- final Cartesian2D center = new Cartesian2D(300, 300);
+ public static List<Vector2D> createCircle(int samples) {
+ List<Vector2D> points = new ArrayList<>();
+ final Vector2D center = Vector2D.of(300, 300);
double range = 2.0 * FastMath.PI;
double step = range / (samples + 1);
for (double angle = 0; angle < range; angle += step) {
- Cartesian2D circle = new Cartesian2D(FastMath.cos(angle), FastMath.sin(angle));
- points.add(circle.scalarMultiply(200).add(center));
+ Vector2D circle = Vector2D.of(FastMath.cos(angle), FastMath.sin(angle));
+ points.add(circle.multiply(200).add(center));
}
return points;
}
- public static List<Cartesian2D> createCross() {
- List<Cartesian2D> points = new ArrayList<Cartesian2D>();
+ public static List<Vector2D> createCross() {
+ List<Vector2D> points = new ArrayList<>();
for (int i = 100; i < 500; i += 10) {
- points.add(new Cartesian2D(300, i));
- points.add(new Cartesian2D(i, 300));
+ points.add(Vector2D.of(300, i));
+ points.add(Vector2D.of(i, 300));
}
return points;
@@ -150,7 +152,7 @@ public class GeometryExample {
@SuppressWarnings("serial")
public static class Display extends ExampleFrame {
- private List<Cartesian2D> points;
+ private List<Vector2D> points;
private PCanvas canvas;
private JComponent container;
private JComponent controlPanel;
@@ -223,7 +225,7 @@ public class GeometryExample {
public void paintConvexHull() {
PNode pointSet = new PNode();
- for (Cartesian2D point : points) {
+ for (Vector2D point : points) {
final PNode node = PPath.createEllipse(point.getX() - 1, point.getY() - 1, 2, 2);
node.addAttribute("tooltip", point);
node.setPaint(Color.gray);
@@ -232,11 +234,11 @@ public class GeometryExample {
canvas.getLayer().addChild(pointSet);
- ConvexHullGenerator2D generator = new MonotoneChain(true, 1e-6);
+ ConvexHullGenerator2D generator = new MonotoneChain(true, new EpsilonDoublePrecisionContext(1e-6));
ConvexHull2D hull = generator.generate(points); //AklToussaintHeuristic.reducePoints(points));
PNode hullNode = new PNode();
- for (Cartesian2D vertex : hull.getVertices()) {
+ for (Vector2D vertex : hull.getVertices()) {
final PPath node = PPath.createEllipse(vertex.getX() - 1, vertex.getY() - 1, 2, 2);
node.addAttribute("tooltip", vertex);
node.setPaint(Color.red);
@@ -244,9 +246,9 @@ public class GeometryExample {
hullNode.addChild(node);
}
- for (Segment line : hull.getLineSegments()) {
- final PPath node = PPath.createLine(line.getStart().getX(), line.getStart().getY(),
- line.getEnd().getX(), line.getEnd().getY());
+ for (Segment line : hull.getPath().getSegments()) {
+ final PPath node = PPath.createLine(line.getStartPoint().getX(), line.getStartPoint().getY(),
+ line.getEndPoint().getX(), line.getEndPoint().getY());
node.setPickable(false);
node.setPaint(Color.red);
node.setStrokePaint(Color.red);
@@ -255,9 +257,8 @@ public class GeometryExample {
canvas.getLayer().addChild(hullNode);
- Encloser<Euclidean2D, Cartesian2D> encloser =
- new WelzlEncloser<Euclidean2D, Cartesian2D>(1e-10, new DiskGenerator());
- EnclosingBall<Euclidean2D, Cartesian2D> ball = encloser.enclose(points);
+ WelzlEncloser2D encloser = new WelzlEncloser2D(new EpsilonDoublePrecisionContext(1e-10));
+ EnclosingBall<Vector2D> ball = encloser.enclose(points);
final double radius = ball.getRadius();
PPath ballCenter =
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/sofm/ChineseRings.java b/src/userguide/java/org/apache/commons/math4/userguide/sofm/ChineseRings.java
index a497da6..01d5572 100644
--- a/src/userguide/java/org/apache/commons/math4/userguide/sofm/ChineseRings.java
+++ b/src/userguide/java/org/apache/commons/math4/userguide/sofm/ChineseRings.java
@@ -19,12 +19,12 @@ package org.apache.commons.math4.userguide.sofm;
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
-
-import org.apache.commons.math4.geometry.euclidean.threed.Cartesian3D;
-import org.apache.commons.math4.geometry.euclidean.threed.Rotation;
-import org.apache.commons.math4.random.UnitSphereRandomVectorGenerator;
-import org.apache.commons.math4.distribution.RealDistribution;
-import org.apache.commons.math4.distribution.UniformRealDistribution;
+import org.apache.commons.rng.sampling.UnitSphereSampler;
+import org.apache.commons.geometry.euclidean.threed.Vector3D;
+import org.apache.commons.geometry.euclidean.threed.rotation.Rotation3D;
+import org.apache.commons.geometry.euclidean.threed.rotation.QuaternionRotation;
+import org.apache.commons.statistics.distribution.ContinuousDistribution;
+import org.apache.commons.statistics.distribution.UniformContinuousDistribution;
/**
* Class that creates two intertwined rings.
@@ -32,7 +32,7 @@ import org.apache.commons.math4.distribution.UniformRealDistribution;
*/
public class ChineseRings {
/** Points in the two rings. */
- private final Cartesian3D[] points;
+ private final Vector3D[] points;
/**
* @param orientationRing1 Vector othogonal to the plane containing the
@@ -44,7 +44,7 @@ public class ChineseRings {
* @param numPointsRing1 Number of points in the first ring.
* @param numPointsRing2 Number of points in the second ring.
*/
- public ChineseRings(Cartesian3D orientationRing1,
+ public ChineseRings(Vector3D orientationRing1,
double radiusRing1,
double halfWidthRing1,
double radiusRing2,
@@ -52,63 +52,62 @@ public class ChineseRings {
int numPointsRing1,
int numPointsRing2) {
// First ring (centered at the origin).
- final Cartesian3D[] firstRing = new Cartesian3D[numPointsRing1];
+ final Vector3D[] firstRing = new Vector3D[numPointsRing1];
// Second ring (centered around the first ring).
- final Cartesian3D[] secondRing = new Cartesian3D[numPointsRing2];
-
- // Create two rings lying in xy-plane.
- final UnitSphereRandomVectorGenerator unit
- = new UnitSphereRandomVectorGenerator(2);
+ final Vector3D[] secondRing = new Vector3D[numPointsRing2];
final UniformRandomProvider rng = RandomSource.create(RandomSource.WELL_19937_C);
- final RealDistribution.Sampler radius1
- = new UniformRealDistribution(radiusRing1 - halfWidthRing1,
- radiusRing1 + halfWidthRing1).createSampler(rng);
- final RealDistribution.Sampler widthRing1
- = new UniformRealDistribution(-halfWidthRing1, halfWidthRing1).createSampler(rng);
+ // Create two rings lying in xy-plane.
+ final UnitSphereSampler unit = new UnitSphereSampler(2, rng);
+
+ final ContinuousDistribution.Sampler radius1
+ = new UniformContinuousDistribution(radiusRing1 - halfWidthRing1,
+ radiusRing1 + halfWidthRing1).createSampler(rng);
+ final ContinuousDistribution.Sampler widthRing1
+ = new UniformContinuousDistribution(-halfWidthRing1, halfWidthRing1).createSampler(rng);
for (int i = 0; i < numPointsRing1; i++) {
final double[] v = unit.nextVector();
final double r = radius1.sample();
// First ring is in the xy-plane, centered at (0, 0, 0).
- firstRing[i] = new Cartesian3D(v[0] * r,
- v[1] * r,
- widthRing1.sample());
+ firstRing[i] = Vector3D.of(v[0] * r,
+ v[1] * r,
+ widthRing1.sample());
}
- final RealDistribution.Sampler radius2
- = new UniformRealDistribution(radiusRing2 - halfWidthRing2,
- radiusRing2 + halfWidthRing2).createSampler(rng);
- final RealDistribution.Sampler widthRing2
- = new UniformRealDistribution(-halfWidthRing2, halfWidthRing2).createSampler(rng);
+ final ContinuousDistribution.Sampler radius2
+ = new UniformContinuousDistribution(radiusRing2 - halfWidthRing2,
+ radiusRing2 + halfWidthRing2).createSampler(rng);
+ final ContinuousDistribution.Sampler widthRing2
+ = new UniformContinuousDistribution(-halfWidthRing2, halfWidthRing2).createSampler(rng);
for (int i = 0; i < numPointsRing2; i++) {
final double[] v = unit.nextVector();
final double r = radius2.sample();
// Second ring is in the xz-plane, centered at (radiusRing1, 0, 0).
- secondRing[i] = new Cartesian3D(radiusRing1 + v[0] * r,
- widthRing2.sample(),
- v[1] * r);
+ secondRing[i] = Vector3D.of(radiusRing1 + v[0] * r,
+ widthRing2.sample(),
+ v[1] * r);
}
// Move first and second rings into position.
- final Rotation rot = new Rotation(Cartesian3D.PLUS_K,
- orientationRing1.normalize());
+ final Rotation3D rot = QuaternionRotation.createVectorRotation(Vector3D.Unit.PLUS_Z,
+ orientationRing1.normalize());
int count = 0;
- points = new Cartesian3D[numPointsRing1 + numPointsRing2];
+ points = new Vector3D[numPointsRing1 + numPointsRing2];
for (int i = 0; i < numPointsRing1; i++) {
- points[count++] = rot.applyTo(firstRing[i]);
+ points[count++] = rot.apply(firstRing[i]);
}
for (int i = 0; i < numPointsRing2; i++) {
- points[count++] = rot.applyTo(secondRing[i]);
+ points[count++] = rot.apply(secondRing[i]);
}
}
/**
* Gets all the points.
*/
- public Cartesian3D[] getPoints() {
+ public Vector3D[] getPoints() {
return points.clone();
}
}
diff --git a/src/userguide/java/org/apache/commons/math4/userguide/sofm/ChineseRingsClassifier.java b/src/userguide/java/org/apache/commons/math4/userguide/sofm/ChineseRingsClassifier.java
index 2ebe439..ce0f473 100644
--- a/src/userguide/java/org/apache/commons/math4/userguide/sofm/ChineseRingsClassifier.java
+++ b/src/userguide/java/org/apache/commons/math4/userguide/sofm/ChineseRingsClassifier.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
+import org.apache.commons.geometry.euclidean.threed.Vector3D;
import org.apache.commons.math4.ml.neuralnet.SquareNeighbourhood;
import org.apache.commons.math4.ml.neuralnet.FeatureInitializer;
@@ -38,7 +39,6 @@ import org.apache.commons.math4.ml.neuralnet.sofm.KohonenTrainingTask;
import org.apache.commons.math4.ml.distance.DistanceMeasure;
import org.apache.commons.math4.ml.distance.EuclideanDistance;
import org.apache.commons.math4.stat.descriptive.SummaryStatistics;
-import org.apache.commons.math4.geometry.euclidean.threed.Cartesian3D;
import org.apache.commons.math4.util.FastMath;
import org.apache.commons.math4.exception.MathUnsupportedOperationException;
@@ -61,7 +61,7 @@ public class ChineseRingsClassifier {
private final DistanceMeasure distance = new EuclideanDistance();
public static void main(String[] args) {
- final ChineseRings rings = new ChineseRings(new Cartesian3D(1, 2, 3),
+ final ChineseRings rings = new ChineseRings(Vector3D.of(1, 2, 3),
25, 2,
20, 1,
2000, 1500);
@@ -185,7 +185,7 @@ public class ChineseRingsClassifier {
new SummaryStatistics(),
new SummaryStatistics()
};
- for (Cartesian3D p : rings.getPoints()) {
+ for (Vector3D p : rings.getPoints()) {
centre[0].addValue(p.getX());
centre[1].addValue(p.getY());
centre[2].addValue(p.getZ());
@@ -220,7 +220,7 @@ public class ChineseRingsClassifier {
public Iterator<double[]> iterator() {
return new Iterator<double[]>() {
/** Data. */
- final Cartesian3D[] points = rings.getPoints();
+ final Vector3D[] points = rings.getPoints();
/** Number of samples. */
private int n = 0;
@@ -253,7 +253,7 @@ public class ChineseRingsClassifier {
private Iterator<double[]> createRandomIterator(final long numSamples) {
return new Iterator<double[]>() {
/** Data. */
- final Cartesian3D[] points = rings.getPoints();
+ final Vector3D[] points = rings.getPoints();
/** RNG. */
final UniformRandomProvider rng = RandomSource.create(RandomSource.KISS);
/** Number of samples. */
diff --git a/src/userguide/pom.xml b/src/userguide/pom.xml
index 6cbcc68..727e1ad 100644
--- a/src/userguide/pom.xml
+++ b/src/userguide/pom.xml
@@ -113,8 +113,33 @@
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
+ <artifactId>commons-rng-client-api</artifactId>
+ <version>1.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
<artifactId>commons-rng-simple</artifactId>
- <version>1.0</version>
+ <version>1.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-geometry-euclidean</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-geometry-enclosing</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-geometry-hull</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-statistics-distribution</artifactId>
+ <version>0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>