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 diaeb).
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