[ 
https://issues.apache.org/jira/browse/GEOMETRY-23?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16675103#comment-16675103
 ] 

Gilles commented on GEOMETRY-23:
--------------------------------

{quote}How is this different from what we already have?
{quote}
Currently, we 
[have|https://github.com/apache/commons-geometry/blob/master/commons-geometry-euclidean/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: GEOMETRY-23
>                 URL: https://issues.apache.org/jira/browse/GEOMETRY-23
>             Project: Apache Commons Geometry
>          Issue Type: Improvement
>            Reporter: Matt Juntunen
>            Priority: Major
>              Labels: pull-request-available
>
> Based on discussion of the current Point/Vector API in GEOMETRY-14 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 commons-math design but avoids the issue 
> raised in MATH-1284 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/commons-geometry/pull/15



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

Reply via email to