Newsgroup: it.hobby.elettronica.digitale
Titolo: Lcd grafico compressione punti

Vorrei rappresentare su un display grafico + punti di quanti fisicamente
sono disponibili.
Supponiamo per esempio che il mio display abbia 60 pixel  sull'asse X e 40
sull'Y ed avere  93 valori  da visualizzare.
Se per l'asse verticale l'operazione e' banale  pixelY = Cint( 40 / fondo
scalaY * valore)
non mi riesce di trovare una soluzione per l'asse orrizzontale.
Qualcuno conosce un algoritmo per questo problema ?
Grazie


Forse non ho capito bene, ma posta cosě, la soluzione č banale anche per 
l'asse X:
pixelX =  60 / fondo_scalaX * valoreX
Chiaramente alcuni pixel saranno sovrascritti a causa della compressione 
dell'asse X.
Oppure un altro metodo potrebbe essere quello di ridurre i valori 
dell'asse prima di disegnarla magari con qualche algoritmo che interpoli 
fra i punti rimossi, ma mi sembra solo uno spreco per un display cosě 
piccolo.
Prova a descrivere meglio il problema indicando anche il linguaggio che 
usi (che a occhio e croce dovrebbe essere il VB).
ciao

 Prova a descrivere meglio il problema indicando anche il linguaggio che
usi (che a occhio e croce dovrebbe essere il VB).
Utilizzo un LPH 7779 (display del nokia 3310) collegato ad un AT89c52 che fa
da datalogger per la temperatura (288 campioni ogni giorno).
Mi piacerebbe visualizzare graficamente una parte o piu' giorni dei campioni
raccolti senza doverli ogni volta scaricare sul PC
L'ideale sarebbe un equivalente di scalewidth e scaleheight di VB ma fatto
con  istruzioni basic standard.

 sull'Y ed avere  93 valori  da visualizzare.
Mi vengono in mentre tre opzioni:
- comprimi i punti come fai per l'asse verticale;
- fai in modo che lo schermo scorra (o metti tipo due schermate) e 
visualizzi 60 punti per volta;
- se nei punti c'č una certa continuitą (se seguono una qualche curva), 
visualizzi un punto ogni due; dovrebbe bastare per avere un'idea 
dell'andamento.
-- 
  Redentore 

 
Se conosci il C ti ho scritto un breve frammento di codice abbastanza 
autodocumentante che comprime una serie di valori mediando quelli che 
hanno la stessa ascissa.
L'ho buttato giù in 10 minuti per cui può darsi che magari ci sia un 
modo più veloce per farlo, ma almeno puoi capire come può essere 
l'algortimo.
ciao spero ti sia utile.
[codice]
/* costanti */
#define XMAXPIXEL 60
#define YMAXPIXEL 40
#define XMAXVALUE 93
#define YMAXVALUE 40
/* contiene i campioni da comprimere */
float yvalues[XMAXVALUE];
/* conterrà i campioni compressi */
float yconverted[XMAXPIXEL];
/* indici vari*/
int i, index, previndex = 0, count = 1;
float mean;
/* inizializza la media */
mean = YMAXPIXEL / YMAXVALUE * yvalues[0];
for (i = 1; i < XMAXVALUE; i++, previndex = index)
{
         /* calcola l'indice attuale (la x)*/
         index = XMAXPIXEL / (float)XMAXVALUE * i;
         /* se è uguale al precedente somma alla media */
         if (index == previndex)
         {
                 count++;
                 mean += YMAXPIXEL / YMAXVALUE * yvalues[i];
                 if (i < XMAXVALUE - 1)
                         continue;
         }
         /* altrimenti inserisci il dato convertito mediandolo */
         yconverted[previndex] = mean / count;
         /* reinizializza la media */
         mean = YMAXPIXEL / YMAXVALUE * yvalues[i];
         count = 1;
}
[fine codice]

 ha scritto nel messaggio
news:P%Xqf.15009$eD5.2...@twister2.libero.it...
