[ https://issues.apache.org/jira/browse/GEOMETRY23?page=com.atlassian.jira.plugin.system.issuetabpanels:commenttabpanel&focusedCommentId=16675103#comment16675103
]
Gilles commented on GEOMETRY23:

{quote}How is this different from what we already have?
{quote}
Currently, we [havehttps://github.com/apache/commonsgeometry/blob/master/commonsgeometryeuclidean/src/main/java/org/apache/commons/geometry/euclidean/threed/Vector3D.java]:
{code:java}
public class Vector3D extends Cartesian3D implements MultiDimensionalEuclideanVector<Point3D,
Vector3D>
{code}
which would be replaced by
{code:java}
public interface Vector3D<COORDINATE> extends MultiDimensionalVector<COORDINATE>
{
public double getX();
public double getY();
public double getZ();
// Define "default" methods in terms of the above Cartesian coordinate accessors.
}
{code}
Then, we'd have
{code:java}
public class Cartesian3D implements Vector3D<Cartesian3D> {
private final double x, y , z;
// Factory.
public static Cartesian3D of(double x, double y, double z) { /* ... */ }
}
{code}
and
{code:java}
public class Spherical3D implements Vector3D<Spherical3D> {
private final double r, theta, phi;
private final double x, y, z; // See below.
// Factory.
public static Spherical3D of(double r, double theta, double phi) { /* ... */ }
// Define conversion methods (values could be computed at construction, trading
// off space for performance since we assume that most algorithms in this library
// are based on Cartesian coordinates).
public double getX() { /* ... */ }
public double getY() { /* ... */ }
public double getZ() { /* ... */ }
// Override interface methods with faster alternatives.
}
{code}
> Remove Euclidean Point Classes
> 
>
> Key: GEOMETRY23
> URL: https://issues.apache.org/jira/browse/GEOMETRY23
> Project: Apache Commons Geometry
> Issue Type: Improvement
> Reporter: Matt Juntunen
> Priority: Major
> Labels: pullrequestavailable
>
> Based on discussion of the current Point/Vector API in GEOMETRY14 and research into
other geometric libraries, I think we should remove the Euclidean Point?D classes and make
Vector?D also implement Point. This will end up being similar to the previous commonsmath
design but avoids the issue raised in MATH1284 since the Point and Vector interfaces are
not related. They just happen to be implemented by the same class, which we're calling Vector?D
since a vector can be used to indicate a point (by adding it to the origin).
> In the course of trying this out this design, I ended up removing 7 classes and simplifying
several methods. I think that's a good indicator that this is a good design choice.
>
> Pull request: https://github.com/apache/commonsgeometry/pull/15

This message was sent by Atlassian JIRA
(v7.6.3#76005)
