API vettoriale, denominazione per moltiplicazione elemento-saggio [chiusa]

0

Sto aiutando a sviluppare una classe Vector 3D, che ha operazioni comuni come:

  • v = v1.cross(v2)
  • v = v1 * v2 - infisso moltiplicato per prodotto punto.
  • v = v1 + v2 - aggiunta infisso.
  • v = v1.slerp(v2) - interpolazione lineare sferica.
  • v.normalize() : crea la lunghezza dell'unità.

Queste operazioni sono molto comuni per le classi di matematica del vettore 3D (esempi elencati di seguito).

Modifica, abbiamo le classi per Colore RGB, Rotazioni ecc ... quindi questa domanda riguarda specificamente il 3D

di Vector

La mia domanda è: esiste una convenzione di denominazione API per moltiplicazione di elementi saggio ?

Apache-Commons-Math lo chiama ebeMultiply ma questo sembra un po 'ad-hoc e non ho visto il nome usato altrove.

Nota:

Mentre preferisco non entrare nello specifico qui ci sono alcune API che sono simili nel nostro ambito:
Unity3D , Apache Commons Math , Mahout , Armadillo , la4j

    
posta ideasman42 27.03.2015 - 21:16
fonte

1 risposta

0

Ecco alcune idee. Nota: i concorsi di denominazione non sono molto adatti al formato StackExchange, ma la discussione sulla base delle scelte di denominazione potrebbe essere adatta se è possibile riepilogare principi utili.

La domanda è significativa in quanto ha un contesto specifico: una classe vettoriale 3D.

Mentre OP non aveva spiegato il caso d'uso preciso della classe o della libreria, si poteva facilmente immaginare che una classe simile potesse essere utile per la geometria 3D e lo spazio colore 3D (RGB / YCbCr).

Tuttavia, se la libreria deve essere estesa ad altri usi, come RGBA (trasparenza), geometria 3D proiettiva (proiettiva), meccanica rotazionale, ecc., è prevedibile che una classe vettoriale 3D sia insufficiente da sola.

Ad esempio, un'implementazione tipica ColorMatrix è una matrice 5x5, con ogni colonna e riga associata a: rosso, verde, blu, alfa (opacità) e infine a termine costante. Le esigenze per le operazioni vettoriali in prospettiva 3D sono simili: un vettore 3D viene riempito con un quarto termine denominato "scala" o "divisore" e le operazioni vengono eseguite con matrice 4x4.

Pertanto, sarà necessario riflettere sulla futura estensibilità dei casi d'uso, o precluderli, quando si considerano i problemi di denominazione.

Un altro divertente (o non-problema) è se vorremmo distinguere tra vettori 3D di differenti significati fisici. Il caso più semplice è un vettore 3D nello spazio che rappresenta (x, y, z) , rispetto a un vettore di colore 3D che rappresenta (r, g, b) . Anche se questo è troppo facile da gestire nella maggior parte dei linguaggi di programmazione, devi ancora scegliere un disegno con attenzione.

Un altro problema specifico della lingua (prima di discutere il problema di denominazione) è l'operatore che sovrascrive le funzionalità di quel linguaggio. In particolare, se la libreria alla fine supporterà più lingue, ciò richiede un'attenta denominazione.

Oltre alle librerie menzionate sopra, si può anche prendere in considerazione:

Ora, la denominazione.

  • Nomi alternativi per la moltiplicazione, come ad esempio:
    • product , prod
    • mul
    • times
  • Parole che indicano l'elaborazione uno alla volta come prefisso / suffisso:
    • each , elem , for ,
  • Parole che indicano il parallelismo dei dati come prefisso / suffisso:
    • parfor , par , vec
    • Nota: a volte, un prefisso a singola lettera potrebbe essere sufficiente:
      • Intel SSE utilizza la lettera "P" per indicare le operazioni SIMD.
      • AMD NEON utilizza la lettera "V" per indicare le operazioni SIMD.
  • Combinazioni di tali parole:
    • elemMul , parMul , eachMul , mulEach , ecc.
risposta data 28.03.2015 - 04:33
fonte

Leggi altre domande sui tag