È possibile definire un'interfaccia comune per i dati di coordinate cartesiane e polari?

4

Sto riscrivendo un insieme di lettori di file che un mio ex collega ha creato per leggere i dati in punti grezzi delle coordinate XYZ (cartesiane) o delle coordinate RTZ (polari). Attualmente i dati sono memorizzati direttamente nel lettore, facendo in modo che tutto contenga sullo stato di tali oggetti. Mi piacerebbe separare il lettore dai dati raccolti che legge creando alcuni oggetti dati.

Ciascuno dei sistemi di coordinate è quasi identico da un punto di vista puramente basato sui dati.

Cartesian Coordinates
  X (List of doubles) 
  Y (List of doubles) 
  Z (Multidimensional array of doubles at [X,Y])

Polar Coordinates
  R (List of doubles)
  T (List of doubles)
  Z (Multidimensional array of doubles at [R,T])

Sto cercando di determinare se posso, in coscienza, definire un'interfaccia comune per entrambi. I dati sono gli stessi, anche se ciò che rappresenta è sottilmente differente. Ciascuno ha due assi opposti di un sistema di coordinate 3D, e una tabella di valori Z in varie combinazioni di quegli assi. Ma una coordinata X non si associa necessariamente a R. E non sono sicuro di ciò che chiamerei le proprietà su un'interfaccia comune: Axis1 , Axis2 e Z ?

O sto cercando di consolidare qualcosa qui che ha davvero bisogno di rimanere separato? Dovrebbe esserci un'interfaccia separata (anche se simile) per ciascun oggetto dati che rappresenta le coordinate di ciascun sistema?

    
posta KChaloux 14.01.2013 - 18:43
fonte

1 risposta

8

È possibile convertire da una coordinata a un'altra. Quindi puoi scegliere di lavorare internamente con una sola rappresentazione e creare metodi per ottenere una rappresentazione dalla tua classe (cioè getX , getY , getR e getT ) insieme a funzioni come rotate .

Il problema con questo, tuttavia, è che la conversione tra sistemi di coordinate è relativamente costosa. Se hai un'applicazione che ha bisogno di gestire le coordinate polari mentre la tua classe opera usando le coordinate cartesiane, potresti facilmente masticare un mucchio di CPU che converte costantemente avanti e indietro. Per molte applicazioni, non è un successo sulle prestazioni che sarebbe accettabile.

Personalmente, preferirei un tipo Coordinate con PolarCoordinate e CartesianCoordinate sottotipi. Alcune operazioni come rotate sarebbero più efficienti quando si utilizza la classe PolarCoordinate mentre altre operazioni come move sarebbero più efficienti quando si utilizza la classe CartesianCoordinate ma non si incorre nel sovraccarico della conversione costante tra i sistemi di coordinate e la tua applicazione potrebbe scegliere quale delle due rappresentazioni sarebbe probabilmente più efficiente per le attività che avrebbe dovuto svolgere.

    
risposta data 14.01.2013 - 18:57
fonte

Leggi altre domande sui tag