[
https://issues.apache.org/jira/browse/GEOMETRY-17?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16619082#comment-16619082
]
Gilles commented on GEOMETRY-17:
--------------------------------
bq. getRealNonZeroNorm()
Sorry to be a bit late, but I don't think it is a good idea to have this one in
a public interface. Rationale is that it is a strange combination of
implementation detail (infinities caused by limited range), check on user input
(non-zero norm as precondition), and stopping NaN propagation, with the side
effect of throwing an exception.
How about this interface method instead:
{code}
/** @return true if the norm is finite, not zero (or equivalent within the
expected accuracy context) and not NaN, false otherwise. */
boolean isFinite();
{code}
?
A separate (syntactic sugar) method for raising an exception:
{code}
class Vectors {
public static double checkedNorm(Vector<?> vector) {
if (vector.isFinite()) {
return vector.getNorm();
}
throw new IllegalNormException();
}
}
{code}
to be used in places where validation is enforced. This would replace the
current {{ensureFiniteNonZeroNorm}} which is longish (and not clearer as to
what is does to "ensure").
In some other places, validation could perhaps be bypassed (even if an error
could be detected) because, in case of valid usage, it would be redundant. I
think that the {{angle}} method may be such a place where infinities or NaN
could be propagated (as they probably result from failing to validate earlier).
> Euclidean Vector Method Follow-Up
> ---------------------------------
>
> Key: GEOMETRY-17
> URL: https://issues.apache.org/jira/browse/GEOMETRY-17
> Project: Apache Commons Geometry
> Issue Type: Improvement
> Reporter: Matt Juntunen
> Priority: Major
>
> This is a follow-up issue to GEOMETRY-9. The following tasks should be
> completed:
> # Vector2D - needs an orthogonal() method like Vector3D
> # Vector#getMagnitude() should be removed. I originally added this as part
> of GEOMETRY-9 as an alias for getNorm(), but after thinking about it more and
> working with it, I believe it's more confusing than useful to have multiple
> names in the code base for the same idea.
> # Vector#withMagnitude() should be renamed to Vector#withNorm() for the same
> reason as above.
> # Vector#getRealNonZeroNorm() - This is currently a private method in the
> Vector implementation classes but I believe it is useful enough to be made
> public. The idea is that this would return the vector norm but throw an
> IllegalNormException if the norm is zero, NaN, or infinite. I've already come
> across some places in other classes (such as Rotation) where I want to use
> this.
>
> Pull request: https://github.com/apache/commons-geometry/pull/11
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)