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

Matt Juntunen commented on GEOMETRY-23:
---------------------------------------

I did some more digging on this from a mathematical standpoint and this is what 
I found: while there are indeed multiple representations possible for vectors 
(eg, Cartesian, polar, barycentric, etc), they are not equally useful from a 
computational perspective. The best source I found for this is from [this 
|https://www.amazon.com/Linear-Algebra-Matrix-Theory-Mathematics/dp/0486623181] 
book, where it says (p31)
{quote}Using analytic geometry, it is possible to reduce the study of planar 
vectors to a study of pairs (a1, a2)T of real numbers... and such vectors can 
be uniquely identified with the rectangular coordinates of their respective 
endpoints.
{quote}

So, Cartesian coordinates function as something of a lowest common denominator 
for analytic geometry. This is witnessed by your dot product example above 
where the spherical coordinates had to be converted to Cartesian and back 
again. It therefore makes sense to me to have our primary vector/point class 
use this system and provide an API for easy conversion between other coordinate 
systems. This is what we have now. 

I believe that our most basic data structure should have the most obvious and 
shortest name possible. When I first started working with commons-math v4, I 
was very confused by the {{Cartesian?D}} classes. I had to read the 
documentation to find out what it was, how it related to other geometric 
objects, and to answer basic questions like whether or not I could get a dot 
product with it. With the name {{Vector?D}}, these questions are automatically 
answered. No user should be surprised or confused by the API, especially if 
they've used other geometry libraries or even the {{java.awt.geom.Point2D}} 
classes.

I don't mean to belabor this issue. I just feel strongly about the naming here, 
especially since these classes are the bedrock of the Euclidean module. If we 
can't come to an agreement, perhaps we should post the issue to the dev ML for 
some outside feedback? 
 

> 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