Eccomi quì per discutere con voi la mia idea riguardo le interfacce. Si tratta di qualcosa di generale che vorrei affinare con voi. Partiamo dalla rappresentazione delle coordinate (x,y). Esiste nella libreria di java la classe Point2D ( http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Point2D.html ) che dispone di features utilissime come il calcolo della distanza tra due punti. Userei tale classe per rappresentare le coordinate in output dai vari oggetti che lo richiedono. All' interno di Piont2D si possono memorizzare le coordinate sia come due interi sia come due double (o float). Usare gli interi potrebbe essere la scelta più naturale poiche gli indici nella bitmap sono essi stessi degli interi. Per contro usare dei double garantisce una maggiore precisione (ci serve??) ma può portare a scomodi cast da e verso int. Che ne pensate? Veniamo alla moneta. Provo a buttare giù una stub per l' interfaccia. Tenete presente che i valori sono istanziati dal costruttore poi sono read-only (tramite i calssici getter). interface Coin { point2D getA(); // coordinata semiasse maggiore " " getB(); // c. semiasse minore " " getCenter(); // coordinata centro int getConfidence(); // valore di confidenza percentuale } Una volta definita l' interfaccia della moneta passiamo all' alogritmo che elabora l' immagine. (NOTA: senza ricorrere allo huge memory di Android possiamo elaborare solo immagini 640x480). Avevo pensato ad un oggetto che dal costruttore riceve un byte[] (oppure un oggetto Bitmap delle API Android) e separa le componenti RGB in tre array di int. Quando viene invocato il metodo public getCoinList() sulle 3 componenti vengono operate le trasformazioni (metodi privati). In output ricevo una lista in cui le monete sono ordinate per confidenza. Stavo pensando di utilizzare la priority queue della java library, anche se potremmo realizzare una semplice sorted list che memorizza tutto in un vettore di Coin, tanto potrei scommetterci che le monete saranno molto poche -al massimo una decina- quindi un insertion sort a ogni put va benissimo e non avremmo l' overhead della priority queue. L' interfaccia della classe elaboratrice potrebbe essere: interface CoinFinder { CoinList findCoins(); } Mentre coin list è definita come: interface CoinList implements Iterable { void put(Coin c); // mette la moneta al posto giusto del vettore Iterator<Coin> getIterator(); // voglio scorrere 'sta lista (accesso casuale possibile?) } Perdonatemi la scarsa adesione alla sintassi java e le eventuali incompletezze ma volevo buttar giù delle idee e discuterne. Per le altre 17 interfacce mi rimetto a voi.
Attachment:
signature.asc
Description: This is a digitally signed message part.