Attualmente sto scrivendo una classe vettoriale multiuso e immutabile in Java che essenzialmente racchiude un double[]
. La classe farà parte di una libreria di giochi, utilizzata per calcolare posizioni di entità, fisica, coordinate pixel, ecc. Il mio obiettivo è renderli utilizzabili anche per altri calcoli (non relativi al gioco).
La classe vector fornisce operazioni di base come ( a
e b
sono vettori):
-
a.length()
(restituisce la lunghezza del vettore nello spazio euclideo) -
a.add(b)
,a.scale(b)
(aggiunta o moltiplicazione di tutti i componenti vettoriali) -
a.dot(b)
,a.cross(b)
(calcolo del punto e prodotto incrociato dia
eb
).
Sto discutendo se dovrei consentire NaN
, infinito positivo e negativo come valori vettoriali e se dovrei distinguere tra +0
e -0
. Ci sono dei motivi per cui non consente i doppi -finiti dovrebbero essere consentiti? È persino pratico implementare le operazioni con questi metodi: come ad es. length()
e scale(..)
si comportano?
Un'altra preoccupazione importante che ho sono i metodi a.hashCode()
e a.equals(b)
. Questo dovrebbe essere vero:
new Vector(+0D, +0D, +0D).equals(new Vector(-0D, -0D, -0D));
Considerato che
Arrays.equals(new double[] { +0D, +0D, +0D }, new double[] { -0D, -0D, -0D }) == false