lunedì 4 febbraio 2008

Un algoritmo di compressione video specifico per video-chiamate

Febbraio 2008: un algoritmo di compressione video specifico per video-chiamate.

Una video telefonata è simile ad un video: possiamo pensarla infatti costituita come i video da una serie consecutiva di immagini.
Questo potrebbe far pensare che i sistemi di compressione dei video - grazie ai quali possiamo scaricare film da internet in tempi decorosi riducendo ad una piccola frazione la dimensione originale del file che lo contiene - possano esser usati anche per le video chiamate, superando così il problema di banda stretta.
Tuttavia, a differenza del video dove tutte le immagini consecutive che lo costituiscono sono a disposizione "subito" e possono esser "impacchettate" considerando solo le variazioni tra un fotogramma e quello successivo, nella video-chiamata abbiamo a disposizione solo l'immagine corrente e quelle già trasmesse: quindi non possiamo sfruttare lo stesso sistema.
Ma qualcosa possiamo comunque fare!
Infatti in una video-chiamata l'immagine attuale sarà sicuramente collegata a quella precedente con qualche relazione: ad esempio se statica potrebbe essere quasi identica, mentre se dinamica (qualcosa si muove in una direzione) è probabile che il movimento non si esaurisca e ... così possiamo memorizzare il movimento per intuire la prossima immagine senza trasmettere nulla!!!!


New York City, febbraio 2008, 53rd Str a fianco del NY Hilton.
Sono seduto in terza fila su un autobus Academy in attesa della partenza: una ragazza seduta davanti a me chiacchiera con il suo cellulare in video-chiamata con un amico.
Le immagini visualizzate dal piccolo monitor a tratti perdono definizione, forse a causa della riduzione temporanea della qualità di trasmissione o della scarsa ampiezza di banda utilizzata.

La cosa che mi ha colpito è che l'immagine sullo schermo era quasi sempre la stessa (il viso dell'amico con uno sfondo indistinto monocolore); le pochissime differenze tra immagini successive erano dovute esclusivamente ai piccoli movimenti dell'interlocutore: quindi tutto sommato il totale di informazione rilevante per la trasmissione era minimo, eppure bastava a mandare in crisi l'apparato ricevente che reagiva alla mancanza di informazione con una pixellatura in definizione minore.
Doveva per forza esistere un modo più "razionale" nella scelta delle informazioni da trasmettere che permettesse di effettuare video-chiamate più fluide possibili, anche con ampiezza di banda ridotta, scartando "un rumore di fondo" costoso in termini di utilizzo di banda.

Ho provato allora a ragionare su come funzioni un sistema di compressione video e come potrebbe esser migliorato per un caso particolare come le video-chiamate.

Gli algoritmi di compressione delle immagini statiche (tipo gif) si basano sull’assunto che in una foto la maggioranza dei punti adiacenti abbiano un valore (colore) molto simile, cosicchè non sia necessario memorizzare il valore di tutti i punti (nel caso di un’immagine vga 640x480 dovremmo memorizzare un vettore di 307.200 valori) ma solo le ricorsività (del tipo il valore 0 - cioè bianco – per i prox 36 punti, il valore 23 per i prox 3 punti ecc) limitando notevolmente le dimensioni.

Nel caso di algoritmi con perdita di informazione tipo jpg possiamo addirittura stabilire le ricorsività non del singolo valore ma di un limitato campo di valori intorno a quello dato (due azzurri con intensità QUASI eguale saranno memorizzati come se si trattasse dello stesso azzurro).

Una video-chiamata in fondo non è altro che una serie ordinata di immagini successive: inviarle una dopo l'altra - anche se le singole fotografie sono compresse - richiede un'enorme scambio di dati tra il terminale che trasmette e quello che riceve le informazioni.
La sfida è ridurre la mole di informazioni da scambiare senza perdere definizione e funzionalità.

Come per le immagini, esistono diversi metodi di compressione video (quali MP4, MOV ecc.) che riducono le dimensioni di un file contenente un film completo permettendoci di scaricarlo da internet in un tempo ragionevole.
Il principio è simile a quello usato per le immagini, dove i pixel consecutivi con valori ricorsivi vengono raggruppati per risparmiare l'uso della memoria (colore nero per i prossimi 50 pixels): oltre a considerare la sequenza spaziale del vettore consideriamo la sequenza temporale dei diversi vettori.
Cioè mentre un'immagine vga 640 x 480 pixels viene memorizzata come un vettore lungo 307.200 posizioni,
un video costituito da 100 immagini vga successive viene memorizzato con una matrice 307.200 x 10.
Verranno quindi rilevati non solo i pixel consecutivi con stesso valore all'interno del vettore (riducendo cosi' la lunghezza del vettore necessario a memorizzare l'intera sequenza dei valori), ma anche i pixel con lo stesso valore che stanno sulla stessa colonna della matrice (cioè i punti in una determinata posizione dello schermo che in tempi successivi non cambiano colore/valore).
Se ad esempio il 150^ pixel del vettore della prima immagine ha valore "0" ed il 150^ pixel delle successive 20 immagini ha sempre valore  "0" allora possiamo codificare solo la seguente informazione:
 valore "0" nella posizione 150 per 20 immagini consecutive
Purtroppo la condizione essenziale per poter utilizzare questi algoritmi è che prima di procedere alla compressione siamo in grado di completare la matrice dei vettori, cioè abbiamo a disposizione tutte le immagini che compongono il video!
Questo non è il nostro caso: il ragazzo che conversa con la ragazza seduta davanti a me sull'autobus tra un istante potrebbe girare la telecamera del suo cellulare, ma il cellulare della mia vicina ADESSO non lo sa!

Ho immaginato di utilizzare il seguente "trucco":
poiché come abbiamo notato le immagini in una video-chiamata hanno la caratteristica di ripetersi con monotonia (per un tempo abbastanza lungo ci sarà sempre il viso dell'interlocutore), definiamo l'immagine al tempo 1 identica a quella al tempo 0.
Trasmetteremo solo l'informazione sui punti che cambiano colore! (cioè le differenze tra le immagini consecutive)
In pratica ci sarà lo stesso software su entrambi i cellulari: se il trasmittente non rileva nell'immagine corrente alcuna differenza rispetto all'immagine precedente NON TRASMETTE nulla, ed il ricevente continua a riproporre sul display la stessa immagine fino a che non riceverà istruzioni diverse!
Questo metodo permette di risparmiare notevolmente la quantità di informazione che è necessario trasmettere, ma può esser ancora migliorato in tre modi:

1) accettiamo una piccola perdita di informazione come nel caso dei JPG: pixel vicini (nella serie spaziale - vettore - come nella serie temporale - colonne della matrice) con colori molto simili vengono memorizzati come se avessero lo stesso colore

2) piccoli spostamenti al di sotto di una soglia stabilita non vengono rilevati

3) teniamo conto della dinamica del soggetto ripreso: questo forse è un aspetto che nessuno aveva ancora considerato!!!

Se il ragazzo dell'esempio ha iniziato a girarsi verso destra, è altamente probabile che continui il movimento nelle immagini successive (o meglio la probabilità che nell'immagine successiva prosegua il movimento è maggiore rispetto alla probabilità che si fermi).
Inseriamo questa "istruzione" nel software dei terminali (come abbiamo fatto per il primo "trucco") e cosi' in caso di movimento del soggetto ripreso sarà il cellulare stesso a calcolare quale dovrebbe essere l'immagine successiva "spostando" sullo schermo parte dell'immagine originale.
L'informazione verrà trasmessa solo se il trasmittente rileva pixels con valori diversi da quelli che ci si aspetta in base all'algoritmo (ad esempio se nel girarsi il ragazzo rallenta o accelera la velocità del movimento, o cambia l'illuminazione o altri accidenti)




In conclusione si tratta di creare un algoritmo che su ciascun telefonino crei l’immagine successiva prima che questa sia ripresa; al momento dell’acquisizione dell’immagine da parte della sorgente video saranno memorizzati solo i dati relativi alle variazioni e di conseguenza l’informazione da trasmettere si riduce drasticamente di dimensione.
Naturalmente l’ipotesi è che le immagini in tempi successivi presentino una correlazione significativa, cioè ci sia alta probabilità che il valore di P t+1 (x,y) sia molto simile a P t (x,y), e che si tenga conto degli spostamenti di gruppi di pixels dovuti alla dinamica del soggetto ripreso.
Tale processo è funzionale se tale relazione valga per almeno il 51% dei punti di un’immagine.
Nel caso della trasmissione di immagini diverse (ad es una serie di quadri o fotografie) non è utile; tuttavia nella stragrande maggioranza dei video esiste una correlazione temporale tra il fotogramma successivo e quello precedente, pertanto la condizione è verificata.

Aggiornamento 4/1/18
Scopro ora che un sistema simile è alla base di un bug appena rilevato nei processori dei pc e telefoni. Si chiama  “Esecuzione speculativa”: ecco la descrizione dall’articolo su la stampa:
“....
Tutte le falle hanno a che fare con la cosiddetta «esecuzione speculativa», una funzionalità con cui i processori, per velocizzare le operazioni, cercano di intuire quale strada tra due possibili è più probabile che venga presa, iniziando quindi a eseguire i calcoli prima di ricevere le istruzioni. 
...”

giovedì 20 febbraio 1997

Progetto wikipedia: perchè non è nato da un'iniziativa italiana?



All'inizio del 1997 mancava ancora qualche anno alla nascita di wikipedia, internet era poco diffuso nella realta' nazionale e l'uso dell'email come mezzo di comunicazione era molto limitato.
Il 17 febbraio di quell'anno ho mandato un fax all'Istituto Geografico DeAgostini con la presentazione di un progetto per la realizzazione di un'enciclopedia consultabile sul web in modo del tutto gratuito (le spese sarebbero state recuperate con la pubblicita').
Partendo da un loro prodotto digitale già esistente (una enciclopedia su CD ROM) si sarebbe potuto coinvolgere il pubblico degli utenti permettendo loro di proporre aggiornamenti (da sottoporre comunque a verifica) e gratificandoli con un credito per le voci poi pubblicate.
Addirittura proponevo di affiancare una versione in lingua inglese che avrebbe esteso la platea dei fruitori dando all'istituto una visibilità mondiale.

Due giorni dopo ho ricevuto via email una risposta da parte del Sig. Guido Bocci, direttore editoriale multimedia: giudicava il progetto non economicamente conveniente per l'esiguità degli internauti ed altri motivi che potete leggere nell'allegato qui di seguito.

Gennaio 2001 nasce wikipedia ... purtroppo non da un progetto italiano.

Seguono originali mio Fax ed Email di risposta dalla DeAgostini di Novara






venerdì 7 febbraio 1997

Giocare con un dado in diverse dimensioni


Il dado, inteso come oggetto a forma cubica tridimensionale con 6 facce, ciascuna identificabile (ad esempio perché contrassegnate con numeri, segni o colori ), esiste da millenni.
Nel corso del tempo ne sono state inventate diverse forme più o meno complesse, tuttavia la sostanza non è cambiata ed è comune a tutte le civiltà antiche e moderne.
La ricorrenza in tempi e luoghi diversi suggerisce che il dado sia una risposta ad un bisogno comune; tale esigenza potrebbe esser connessa con la necessità di trovare un modo semplice e rapido per creare un ordinamento casuale, cosa che noi esseri umani non siamo capaci di ottenere facilmente, (data la struttura del  nostro cervello che tende a trovare ricorrenze e schemi anche dove non ci siano).
Anche in una società primitiva, la condivisione di uno strumento “generatore” di casualità ha un’importanza primaria in quanto rappresenta una valida alternativa al ricorso alla violenza nei casi di conflittualità interni al gruppo – pericolosa per la stabilità del gruppo stesso.
Ad esempio per definire una gerarchia, indispensabile nel caso sia necessario assegnare dei turni (la precedenza nella scelta dei pezzi della preda) o stabilire chi abbia diritto ad appropriarsi od utilizzare qualcosa di non divisibile (la femmina, il pasto appena sufficiente per un individuo), che eviti il ricorso continuo allo scontro fisico, la cui conseguenza è l’indebolimento di entrambi gli sfidanti.
Dal punto di vista evolutivo costituisce senz’altro un avanzamento in quanto il gruppo che si affida alla selezione casuale (i cui componenti condividono le regole “del gioco”) spreca meno forze in combattimenti tra i propri membri, forze che vengono risparmiate per essere usate in combattimenti con altri gruppi.
La gerarchia ottenuta attraverso il sorteggio costituisce inoltre un equilibrio più stabile; nel mondo animale ad esempio, all’interno del branco l’ordinamento gerarchico si basa su rapporti di forza tra gli individui che lo costituiscono; non essendo “la forza di un individuo” un valore assoluto (cambia infatti continuamente a seconda del grado di salute, stanchezza, età, nutrizione, accoppiamento, emotività, rapporti con gli altri membri del gruppo, ecc. ecc.) l’equilibrio così ottenuto è di per se stesso fragile in  quanto influenzato da innumerevoli fattori esterni.  Conseguentemente assistiamo a violenti scontri quotidiani la cui finalità è semplicemente l’ “aggiornamento” della gerarchia e che talvolta implicano effetti negativi sul gruppo stesso quale una diminuzione della sua forza totale (per la morte in combattimento o l’invalidità procurata ad alcuni componenti) o peggio ancora una divisione in due gruppi (conseguente alla ribellione di una parte dello stesso).

Possiamo pertanto affermare che l’evoluzione ha portato l’uomo a scegliere un modo meno pericoloso per assegnare una gerarchia.
Troviamo un esempio di quanto affermato addirittura nell’Illiade: scontro violento tra 2 eserciti (il cui esito nefasto per entrambi si cercò poi di limitare con l’introduzione dello scontro tra 2 campioni) contrapposto al gioco a sorte per l’assegnazione delle prede di guerra.
O alla veste di Gesù giocata ai dadi dai soldati romani (membri dello stesso esercito/gruppo che pur dotati di armi di offesa rinunciano ad usarle per definire un vincitore in un conflitto interno al gruppo)
Uso della violenza per determinare una gerarchia tra gruppi venuti a contatto ma scontro figurato (e non violento) tra membri dello stesso gruppo.


1.1 Generatori di casualità.
E’ probabile che il primo “dado” della storia sia stato un surrogato della moneta nel gioco “testa o croce”; tuttavia questo semplice mezzo per attribuire una precedenza senza conflittualità avrà dimostrato in breve tempo il suo limite – stabilire una preferenza tra due, a meno che si “indica un torneo” con molti lanci e confronti – e sarà stato sostituito da un’altra forma “generatrice di casualità” che permetta rapidamente ordinamenti con più soggetti.

Esempio:  sfidanti per la mano della principessa.
a) 2 sfidanti A e B:
- al lancio della moneta 2 possibili risultati: vincente o perdente.  Una sola mano stabilisce l’ordinamento casuale tra A e B e la moneta è sufficiente.
b) 3 sfidanti A B e C:
- sono necessari almeno 3 lanci della moneta per stabilire il vincitore:
1) scontro AB
2) scontro AC
3) scontro BC
c) 4 o più sfidanti A B C e D:
- sono necessari almeno 6 lanci (scontri AB AC AD BC BD CD).
Nel caso si usi una qualche specie di dado con 4 facce (un tetragono), è sufficiente un lancio per ciascun partecipante (escludendo sempre i casi di parità) per ottenere una “classifica” che altrimenti necessita 6 lanci di monete.
Aumentando il numero dei partecipanti è ovvia la funzionalità del dado come lo conosciamo (o dei dadi qualora gli sfidanti siano più di 6): invece di molteplici scontri tra 2 sfidanti per volta, una sola sfida tra più partecipanti.

2.1 Perché i dadi che utilizziamo hanno 6 facce?
Abbiamo visto che il dado a 6 facce è uno strumento più efficiente della moneta qualora gli sfidanti siano almeno 4; tuttavia il problema di organizzare un “torneo” si ripropone immediatamente qualora ci siano più di 6 sfidanti (tralasciamo sempre il caso di situazioni di parità).
Una soluzione sarebbe quella di realizzare “dadi” con un numero superiore di facce, usando a tal fine solidi tridimensionali con più lati; tuttavia non abbiamo testimonianze né storiche né recenti di creazioni simili.
Piuttosto è in uso il lancio in contemporanea di 2 o più dadi per ottenere un range più ampio di numeri casuali (nel caso del lancio di 2 dadi il range sarà da 2 – cioè 1+1 – a 12 – cioè 6+6 – e sarà utile per ordinare fino a 11 elementi senza la necessità di organizzare un torneo).
Attenzione però! Usando 2 dadi la probabilità di ottenere con un lancio un numero (somma dei due dadi) da 2 a 12 non è sempre la stessa come nel caso di un solo dado (ottenere uno qualunque dei numeri da 1 a 6 è la stessa): infatti ad es. ottenere 8 è più facile che ottenere 2 o 12 (nel primo caso 8 è il risultato di 2+6, 3+5, 4+4… mentre 2 e 12 sono ottenibili solo con 1+1 e 6+6)

Partiamo da alcune considerazioni.
- Qualsiasi solido lasciato cadere raggiunge uno stato di quiete appoggiando al piano su cui cade una delle sue facce; escludiamo solidi complessi in cui ci siano rientranze o protuberanze per ovvi motivi.
- La casualità del risultato del lancio è garantita dalla simmetria delle facce: durante la rotazione del solido, la simmetria fa sì che non ci siano forze prevalenti (naturalmente nell’ipotesi che la densità del materiale con cui è costruito il dado sia la stessa in ogni sua parte, altrimenti un baricentro spostato favorisce una o più facce rispetto alle altre).
- Non esiste un solido costituito da sole 3 facce; se aggiungiamo una quarta faccia otteniamo un tetraedro, solido simmetrico, con 4 facce eguali.

L’uso di un dado a forma di tetraedro garantisce la casualità in quanto simmetrico, tuttavia abbiamo affermato che lo stato di quiete dopo il lancio viene raggiunto solo quando una delle sue facce aderirà alla superficie del tavolo da gioco; la parte rivolta verso di noi sarà dunque non una faccia ma un vertice.
Nella storia sono stati usati “dadi” a forma di tetraedro (ottenuti da ossa di capra) dove i vertici e non le facce erano numerati, ma sono stati abbandonati ben presto principalmente per due ragioni:
1) servono ad ordinare numeri da 1 a 4 (mentre il dado cubico ordina un intervallo da 1 a 6)
2) un punto (vertice) è meno facile da numerare o identificare rispetto ad una faccia.

Il solido simmetrico successivo al tetraedro è il cubo sul quale sono modellati i dadi come li conosciamo.

Aumentando ancora il numero di facce troviamo altri solidi tridimensionali simmetrici quali l’ottaedro, il dodecaedro e l’icosaedro; tuttavia la realizzazione di “dadi” con la loro forma è più molto più difficile e soggetta ad errori che ne inficiano la simmetria e dunque la “casualità”.

Il dado cubico è dunque il solido simmetrico più facile da realizzare anche per civiltà antiche con pochi mezzi “tecnologici” per garantire una simmetria della forma, e dunque la casualità del risultato di un lancio.
Queste sono in breve le ragioni del suo successo.

NB: possiamo usare come “dadi” tutte le figure simmetriche. Il numero di solidi simmetrici è limitato; rimando allo studio delle simmetrie in dimensioni >3 per la definizione di tutti i tipi di figura simmetrici (cui l’ultimo è il famoso “mostro” che esiste in uno spazio con 196.883 dimensioni e chiude definitivamente l’atlante dei diversi tipi di simmetria esistenti)

3.1 Il significato di dimensioni spaziali ortogonali.
L’argomento di questo breve saggio è analizzare la struttura ed il “funzionamento” di “dadi cubici” realizzati in spazi con dimensioni superiori a 3; poiché l’unica esperienza che ci ritornano i nostri sensi è limitata ad uno spazio a 3 dimensioni, si tratta naturalmente di un gioco concettuale.
Prima di affrontare il problema della costruzione di un dado in 4 o più dimensioni, proviamo a spiegare come si possa “stirare” lo spazio in più dimensioni, ortogonali l’una con l’altra.

Partiamo con l’esempio di una colonia di batteri.
Un singolo batterio può esser considerato (date le sue esigue dimensioni) come un punto geometrico senza dimensioni misurabili.
Supponiamo di inserirlo all’interno di una provetta con una scanalatura molto sottile: il batterio inizierà a sdoppiarsi allungandosi nell’unica direzione libera, e dopo qualche tempo avrà costituito ciò che potremmo definire un segmento di retta (misurabile in una dimensione spaziale).
L’eventuale rottura della provetta causerà una espansione in due direzioni della popolazione batterica sul fondo del contenitore (che immaginiamo a forma di parallelepipedo con base quadrata); otteniamo così una figura piana che può esser misurata in due direzioni ortogonali l’una all’altra.
Una volta occupato tutto il fondo del recipiente, l’aumento della popolazione batterica comporterà un’espansione verso l’alto e l’occupazione di uno spazio tridimensionale, dove anche questa nuova direzione forma angoli retti con le precedenti due.
E poi?
La nostra esperienza si ferma qui, visto che non riusciamo a figurarci ulteriori dimensioni.
Tuttavia nulla ci impedisce di “immaginare” di proseguire l’esperimento in nuove dimensioni ortogonali alle precedenti.

Una descrizione geometrica di questo processo potrebbe essere la seguente:
- Il punto si “stira” verso una direzione e crea un segmento lineare.
- Il segmento si “stira” in una direzione ortogonale alla prima e crea un  quadrato
- Il quadrato si “stira” in una terza direzione ortogonale alle 2 date e crea un cubo
- Il cubo si “stira” in una quarta direzione ortogonale alle 3 date e crea un 4-cubo
- Il 4-cubo si “stira” …. ecc. ecc.
Per nostra comodità parleremo di 0-cubo per il punto (cubo a zero dimensioni), di 1-cubo per il segmento, di 2-cubo per il quadrato, di 3-cubo per il cubo di cui abbiamo esperienza diretta e così via (4-cubo, 5-cubo, … n-cubo)

4.1 Com’è fatto l’iperspazio?
Sembra una domanda da “fumetto” o film di fantascienza; l’iperspazio è infatti definito in tali media come qualcosa oltre le 3 dimensioni spaziali cui siamo abituati e generalmente vi sono ambientati universi paralleli, viaggi a velocità iperluminica e tutto quanto contravviene l’esperienza comune e la meccanica classica.
In fisica le dimensioni spaziali necessarie a spiegare il nostro universo sono più di 3 (il tempo indicato come 4^ dimensione nella teoria della relatività non è comunque una dimensione spaziale, ma con le altre 3 costituisce un continuum che non è argomento di questo saggio), tuttavia hanno caratteristiche peculiari (ad esempio una curvatura molto stretta) diverse dalle dimensioni spaziali tra loro ortogonali di cui qui stiamo trattando.
Pur mancando di sensi che ci facciano “vedere” oltre la 3^ dimensione, possiamo “immaginare” oggetti con dimensioni spaziali superiori utilizzando un po’ di buon senso e pochissima matematica.
Nel capitolo precedente abbiamo concluso parlando dello stiramento come processo generatore di ipercubi in una dimensione superiore; sappiamo quindi come generare un (n+1)-cubo dato un n-cubo, ma non abbiamo idea di come questo sia “fatto” se n>3.


4.2 Il caso particolare dell’ipercubo a 4 dimensioni.
Il caso particolare del 4-cubo è raffigurabile con uno stratagemma: anche se non possiamo “vederlo”, possiamo coglierne l’aspetto globale attraverso la sua proiezione (la sua ombra) in uno spazio tridimensionale.
Un 3-cubo può esser rappresentato su una superficie 2d ricavandone un’ombra: in pratica possiamo disegnarne la proiezione su questo foglio (è un’esperienza comune a tutti credo):

      

una volta disegnato un quadrato (corrispondente alla faccia verso di noi) per rappresentare la 3^ dimensione si fa partire un segmento inclinato da ciascun vertice del 2-cubo (la cui inclinazione e lunghezza dipendono dalla convenzione prospettica adottata), cosicchè da ciascun vertice partano 3 linee, due sul piano ed una che ci da l’illusione di “forare” il foglio e perdersi in profondità.
L’indice dell’esistenza della profondità è per convenzione dato dall’angolo acuto con cui è inclinato il lato che non sta sul foglio (45° nel caso si adotti il criterio dell’assonometria cavaliera).
In fondo si tratta di disegnare un secondo quadrato trascinando una copia del primo muovendosi lungo un segmento che forma un angolo acuto con uno dei lati del quadrato.

Per analogia ripetiamo la stessa esperienza in 3D: trasciniamo un cubo lungo una diagonale interna al cubo 3D ed otteniamo … un cubo dentro un cubo!
Da ogni vertice partiranno 4 spigoli: 3 formeranno angoli di 90° mentre il 4° formerà con essi un angolo acuto a simulare la 4 dimensione (la sua proiezione in 3 dimensioni).


Quali sono le caratteristiche dei cubi a n dimensioni con n>3?
Possiamo intuirlo ricavandolo dalla logica, e cioè esaminando le relazioni tra i cubi a n dimensioni dove n<4 ed estendendo lo stesso ragionamento ai cubi di dimensioni superiori.




4.3 caratteristiche dei cubi ad n. dimensioni
partiamo da uno 0-cubo: il punto.   Un solo vertice.
Il passo successivo è un 1-cubo (cioè il segmento): 2 vertici ed un lato (spigolo)
Poi il 2-cubo (il quadrato): 4 vertici, 4 lati
Il 3-cubo (il nostro cubo): 8 vertici, 6 facce, 12 lati.
E poi?

a) numero di vertici: 1,2,4,8, ..   sono potenze di 2: 2^n dove n = dimensione del cubo.
Il cubo a 4 dimensioni (ipercubo) avrà 2^4 vertici, e cioè 16
b) spigoli o lati: 0,4,12, …
c) facce: 0,0,1,6, …

Possiamo creare la seguente matrice dove n è il numero di dimensioni del nostro n-cubo ed m quelle di m-cubi dove m<=n

n / m   |       0       1       2       3       4       5       6
-------------------------------------------------------------------
0       |       1
1       |       2       1
2       |       4       4       1
3       |       8       12      6       1
4       |       16      32      24      8       1
5       |       32      80      ?       40      10      1
6       |       64      192     ?       ?       60      12      1

Significato: la diagonale è per n=m dunque n/m=1
Quando m=n-1 abbiamo una serie dei numeri pari: 2 4 6 sino al 3-cubo.  Possiamo pensare che per l’ipercubo ci sia un 8, ecc. ecc.  [ se  m=n-1 allora i(n-1,n)=n*2 ]
Quando m=n-2 allora i(n-2,n)=n*2*(n-1)

In pratica solo con la logica possiamo riempire la matrice qui sopra.
La formula che la esprima è la seguente:


Qui di seguito il listato di un’applicazione in Vbasic di mia creazione che, dati “n” e “m” risponde alla domanda: “quanti m-cubi stanno in un n-cubo dove m<=n”:

Rem cubi

inizio:
input "n=";n
input "m=";m
If m > n Then Print "Errore": Clear: GoTo inizio
Dim y(n + 1, m + 1)
For c = 0 To n: y(c, 0) = 1: Next c
For c = 1 To n
For d = 1 To m
If d > c Then GoTo prossimoc
y(c, d) = y(c - 1, d - 1) + y(c - 1, d)
Next d
prossimoc:
Next c

x = y(n, m) * 2 ^ (n - m)

Print "Risultato";
Print x

input "Nuovo calcolo";a$
If a$ = "S" Or a$ = "s" Or a$ = "" Then Clear: GoTo inizio
End

Usando questa semplice applicazione, possiamo descrivere le principali caratteristiche di dadi di ogni dimensione.

5.1 Il dado tridimensionale di cui abbiamo esperienza comune.
Possiamo definire il dado come un cubo a 3 dimensioni che, lanciato da una mano in una porzione di spazio tridimensionale, viene lasciato cadere su una superficie piana dove rimbalza ruotando sui propri 2 assi e dopo un percorso si “ferma” presentando una delle sue sei facce verso “l’alto”.  Ogni faccia è identificata (da un numero o da un colore) che rappresenta il valore casuale selezionato.
Proviamo a descrivere questa esperienza in altro modo:
Il dado è un generatore di numeri casuali nell’intervallo da 1 a 6
Consiste in un cubo ad n-dimensioni costituito da 6 cubi ad n-1 dimensioni: in base alla formula spiegata nel capitolo precedente, esiste solo un n-cubo che soddisfi questa condizione, quello dove n=3
Per compiere la propria funzione, viene lasciato cadere dall’alto verso il basso all’interno di uno spazio tridimensionale: durante la caduta può ruotare intorno ad uno dei suoi due assi (alto-basso, sinistra-destra) oppure a tutti e due.
Il movimento dall’alto verso il basso termina con uno o più rimbalzi su una superficie a n-1 dimensioni (nel nostro caso un piano bidimensionale).
La forza impressa dal lancio e dalla gravità ad un certo punto si esaurisce e le rotazioni ed i rimbalzi terminano quando il dado raggiunge uno stato di quiete .
Tale stato di quiete si esprime con l’adiacenza di una faccia (cubo ad n-1 dimensioni) ad una parte del piano (figura a n-1 dimensioni).
Il numero casuale generato è quello corrispondente alla faccia opposta (al suo cubo n-1 dimensioni simmetrico rispetto al centro del cubo ad n dimensioni).

6. Un dado in uno spazio n-dimensionale
Il concetto di dado, quale lo abbiamo definito, può essere espresso in uno spazio a qualsivoglia numero di dimensioni:  assolverà sempre la sua funzione di generatore di casualità.

6.1 Giocare con un dado a 1 dimensione.
Un segmento ha 2 vertici che possiamo numerare.

6.2 Giocare con un dado a 2 dimensioni
Un dado a due dimensioni è un quadrato con 4 lati, dunque 4 facce (vengono generati numeri da 1 a 4)
La caduta avviene dal bordo del foglio superiore a quello inferiore, e viene interrotta da un segmento sul quale il quadrato rimbalza.
L’unico tipo di rivoluzione che possiamo imprimere nel corso della caduta è quella intorno al proprio centro (del tipo destra-sinistra).
Quiete: se la gravità preme dall’alto verso il basso del foglio, lo stato di quiete del nostro dado viene raggiunto quando una delle facce risulta adiacente al segmento (parziale sovrapposizione di due figure 1-dimensionali).
Il numero casuale generato sarà quello assegnato al segmento opposto (quello rivolto verso l’alto del foglio)
Se definiamo lo stato di quiete come l’adiacenza di un lato del quadrato al segmento, l’operazione di tirare un dado bidimensionale coincide con il far ruotare il quadrato con i lati numerati da 1 a 4 sul segmento fino a che, dopo un certo percorso più o meno lungo a seconda della forza impressa inizialmente e dell’attrito esercitato dal segmento (e dall’aria) sui vertici e poi sui bordi del quadrato, il quadrato si ferma con un lato adiacente al segmento.
Poiché la gravità si esercita in uno spazio bidimensionale dall’alto verso il basso, non può rimanere in bilico su uno spigolo.
Il numero ”sorteggiato”, >0 e <5 sarà quello assegnato al lato in alto del quadrato.

6.3 Giocare con un dado a 3 dimensioni
I dadi che siamo soliti usare hanno 3 dimensioni e coincidono con la rappresentazione geometrica di un cubo: 8 vertici, 6 facce quadrate bidimensionali.
La rivoluzione che possiamo imprimere avviene secondo due assi
Il rimbalzo può cambiare l’asse di rivoluzione (es. nord-sud con est-ovest)
Tradizionalmente sono numerate le facce (che possiamo definire cubi ad n-1 dimensioni, dove il dado è un cubo a dimensione 3 e le sue 6 facce sono cubi a 3-1=2 dimensioni, cioè quadrati).
6 facce = 6 numeri.
Il dado-cubo rimbalza su una superificie piana (cubo ad n-1 dimensioni)
Rimbalza su questa superficie ed il suo stato di quiete coincide con l’adiacenza di una faccia del dado con il piano.
Il numero vincente è quello assegnato alla superficie opposta a quella adiacente.


6.4 Giocare con un dado a 4 dimensioni
I nostri sensi ci impediscono di visualizzare una figura quadridimensionale tipo il cubo a 4 dimensioni che potrebbe costituire il nostro dado 4d
Per intuizione, se il dado 2d  ha 4 facce numerabili (4 lati del quadrato) ed il dado 3d ha 6 facce (6 quadrati come lati del cubo3d) il dado 4d avrà 8 facce numerabili; non si tratterà di facce lineari come nel caso del dado 2d né piane come nel caso del dado 3d, ma di 8 facce a forma di 3-cubo che costituiscono i lati del 4-cubo.
Ad ogni 3-cubo assegneremo un numero da 1 a 8.
La rivoluzione avverrà intorno a 3 assi (destra-sinistra, basso-alto, ?-?)
Il rimbalzo avverrà su una superficie 3d quale un cubo e lo stato di quiete si avrà quando una faccia cubica del dado 4d sarà adiacente al cubo 3d che ne costituisce la superficie di appoggio

Luogo di adiacenza.
Per ipotesi supponiamo che la dimensione del “lato” del dado sia 1/2 della superficie di appoggio
Nel caso del cubo 2d,  il segmento “lato”  risulta adiacente alla parte centrale del segmento “base”
Nel caso del cubo 3d, il quadrato “lato”  risulta adiacente alla parte centrale del quadrato “base”
Nel caso del cubo 4d, il cubo “lato” risulta adiacente alla parte centrale di ogni faccia del cubo.
Qui di seguito un tentativo di rappresentazione grafica dell’adiacenza in stato di quiete.

Lo stesso gioco può esser ripetuto con n-cubi in ogni dimensione.

Ora la sfida è creare un “videogioco” che ci permetta di giocare con un 4-cubo come dado 4d: dobbiamo poter seguire ogni suo movimento attraverso la proiezione su uno spazio tridimensionale (come abbiamo visto nel capitolo 4.2).

Continua ….



sabato 10 febbraio 1979

Ricorrenze nei decimali di una divisione reiterata


1979-1980 Ricorrenze nei decimali di una divisione reiterata

Nel corso delle vacanze scolastiche, soprattutto nei mesi di giugno e luglio, era mia abitudine in quel periodo andare nell'ufficio di Valenza della ditta di mio padre per aiutare lo staff nelle piccole incombenze.
L'idea del genitore era quella di tenermi occupato nei giorni feriali: in realtà - non avendo esperienza - mi affidavano compiti ripetitivi e noiosi, e passavo spesso lunghe ore a far nulla, con a disposizione tuttavia carta per quaderni ad anelli e la calcolatrice.
La noia mi portava a schizzare disegni - soprattutto muri di pietra, tombe, paesaggi desolati ed alberi scheletrici (visibili al link www.davidemolina.it/davide/davideschizzi.html ) - oppure in alternativa a giocare con i numeri.

Capitava così di riempire pagine di numeri, dividendo per 2 un qualunque numero iniziale.
Dapprima utilizzavo la calcolatrice, poi - superato il numero di cifre disponibili sul display - proseguivo facendo i conti a mano.
Una volta riempito un foglio mi lasciavo affascinare dalla "trama" dell'arazzo che si veniva a creare.




Ho presto notato che l'ultima cifra decimale di ogni riga rimane la stessa, e cosi' la penultima (nel nostro caso 5 l'ultima e 7 la penultima).
La terz'ultima cifra decimale invece ricorre a righe alterne: cioè il numero nella riga successiva presenta la terzultima cifra decimale diversa da quella del numero nella riga corrente. Tuttavia si ripropone eguale nel numero della riga successiva, e così via. L'avevo definita "alternanza tra 2 cifre" (nel nostro caso si alternano 3 e 8).
La quart'ultima cifra decimale ricorre ogni 4 numeri con decimali (nel nostro caso si alternano 1 9 6 e 4).
La quint'ultima cifra decimale ricorre ogni 8 numeri con decimali.
La sest'ultima cifra decimale ricorre ogni 16 numeri con decimali.
e cosi' via seguendo la serie delle potenze di 2.

Quindi partendo dall'ultima cifra decimale, ricaviamo il seguente specchietto :



Data una serie di numeri il cui primo elemento presenti almeno un decimale ottenuta dividendo il numero precedente per 2, si manifesta la seguente proprietà:
le cifre precedenti l'ultimo decimale - a parità di distanza dallo stesso - si ripresentano con regolarità mano a mano che la serie prosegue.
Il numero di elementi della serie che dobbiamo saltare per trovare la stessa cifra nella stessa posizione (cioè ad egual distanza eguale dall'ultima cifra decimale) è dato dalla potenza di 2 dove l'esponente è pari alla distanza stessa.

Questo è quanto mi aveva colpito a quel tempo, 37 anni fa'.

Scrivendo il blog ho provato a fare la stessa cosa ma usando strumenti "più attuali" e cioè servendomi di un PC ed un foglio elettronico (Excel)

Per prima cosa ho trovato un mio errore di calcolo nella versione originale alla 15 riga verso il basso partendo dal primo numero con decimali, cioè nel calcolo del numero con 15 cifre decimali: 
succede, sono sempre stato molto distratto!

Se procediamo di altre 6 righe verso il basso arrivando al numero con 21 cifre decimali notiamo che ... il foglio di excel sbaglia la divisione indicando la 20 cifra decimale non corretta!
I numeri fino a 20 cifre decimali vengono calcolati correttamente dalla formula di excel che ottiene il numero nella riga successiva dividendo il numero della riga precedente per 2 (N.B. si è stabilito un formato per le celle "numero con 30 decimali"). 
Se tuttavia il numero ha più di 20 cifre decimali il calcolo ritorna un risultato non corretto a partire dalla 21^ cifra.
Ce ne accorgiamo ad occhio perché ... cambia "la trama" del nostro arazzo: 
infatti i numeri non terminano più con cifre che si ripetono alternandosi con le regole che abbiamo visto in precedenza.



giovedì 6 luglio 1978

1978: Un raggio di luce “gira” intorno al sole …in 21 giorni e 12 ore!

1978: Un raggio di luce “gira” intorno al sole ….




Antefatto.
Nel settembre 1978, durante una breve permanenza a Torino in occasione dell’ostensione della Sindone, ho comprato d'istinto su una bancarella un libro che mi incuriosiva.
Si trattava di un breve saggio di John Taylor intitolato “I buchi neri: la fine dell’universo?” che riportava in copertina una bella immagine di una nebulosa vista al telescopio (credo quella del cavallo).


La notte seguente, mentre tutti dormivano nei sacchi a pelo, ho avuto modo di leggerne la parte dove si parla dell’orizzonte degli eventi e dell’impossibilità da parte della luce di sfuggire alla fortissima gravità di questi corpi celesti.


Qualche mese prima avevo "divorato" un breve saggio divulgativo sulla relatività generale di Einstein (nella mia biblioteca era anche presente il volume “Relatività: esposizione divulgativa” di A. Einsten, edizioni Bollati Boringhieri che avrei letto ed approfondito negli anni seguenti) pertanto avevo nozione della capacità da parte della massa di modificare lo spazio tempo intorno a lei “curvando” la traiettoria della luce.
Nel caso specifico della nostra stella il saggio precisava la misura della deviazione pari al diametro di una moneta da 1/4 di dollaro.

La curiosità.
Mi sono chiesto se un campo gravitazionale intenso come quello del nostro sole (capace di curvare un raggio di luce a lui tangente di 0,83 secondi di arco, e cioè circa 2,5 cm ogni 5 km) potesse esser utilizzato per far si che un raggio di luce, emesso da una torcia ad opportuna distanza dalla nostra stella e puntato tangente alla stessa, potesse esser riflesso da uno specchio posizionato simmetricamente dalla parte opposta dell'astro e .. ritornare al punto di partenza.
Ho perciò ideato il seguente esperimento concettuale.
Una sorgente (una specie di “torcia” laser) emette un raggio di luce in direzione delle vicinanze del bordo del nostro sole (cosicché quest’ultimo risulti per uno spettatore lontano come tangente alla nostra stella); la massa solare devierà la traiettoria rettilinea verso uno specchio che avremo collocato in posizione simmetrica rispetto al sole, e cioè alla stessa distanza che lo separa dalla nostra “torcia”.
Raggiunto lo specchio, il raggio di luce si rifletterà e ritornerà esattamente al punto di partenza puntando il bordo del sole in posizione opposta a quella per cui è passato prima; cioè in un certo senso il nostro raggio “girerà intorno al sole” tornando al punto di partenza.
Se noi fossimo in prossimità della torcia, guardando in direzione del disco solare vedremmo lo specchio illuminato dal nostro raggio al lato opposto del cerchio solare rispetto alla direzione verso cui la nostra “torcia” è puntata.
Ma a quale distanza dal sole devono esser posizionati rispettivamente sorgente di luce e specchio per ottenere un simile risultato?

Il metodo seguito.
Nel settembre 1978 dovevo ancora iniziare la 4^ ginnasio (primo anno di scuole superiori) e dunque non avevo ancora studiato trigonometria.   Tuttavia, dall’esperienza acquisita presso i boy scouts, sapevo bene come ricavare l’altezza di un albero utilizzando un bastone.
Per risolvere il quesito ho applicato quello stesso metodo, utilizzando grandezze ricavate dalla consultazione dell’enciclopedia che avevo disponibile in casa, la GE20 DeAgostini:
1.392.000 diametro del sole in km
curvatura determinata dalla massa solare pari a 2.5 cm su 5 km
299.792 km/sec velocità della luce
5.913.000.000 distanza media di plutone dal sole



Lo svolgimento originale:
All’inizio di questa pagina sono riportati il fronte e retro della pagina a quadretti del quaderno su cui allora cercai di trovare una soluzione.
Il metodo - seppur ingenuo - è corretto ma l'applicazione è falsata da un errore grossolano: avrei dovuto considerare la ½ del diametro solare invece del diametro intero, dunque la distanza ottenuta risulta il doppio del valore corretto.

Ecco infine lo svolgimento corretto:
1.392.000 diametro del sole in km
a 5 km di distanza la deviazione risulta 0,000025 km
 696.000 km è la ½ del diametro solare
 299.792 km/sec è la velocità della luce
 5.913.000.000 distanza media di plutone dal sole



risultati corretti sono i seguenti:
circa 139.200.000.000 km è la distanza dal sole degli osservatori, pari a quasi 24 volte la distanza dal sole di plutone.
La luce impiega quasi 5 giorni e 9 ore per percorrere tale distanza:
circa 21 giorni e 12 ore sono necessari alla luce per tornare al punto di partenza dopo aver raggiunto lo specchio.

Riflessioni:
Naturalmente un esperimento di questo tipo nella realtà non potrebbe esser eseguito così come descritto.
Per prima cosa sia lo specchio che “la torcia” sarebbero in costante movimento su un’orbita intorno al sole, quindi né lo specchio dopo più di 10 giorni né la torcia dopo più di 21 giorni si troverebbero nella posizione iniziale.
L’ellitticità delle orbite esterne complica ancora di più il modello, senza parlare poi degli effetti delle altre masse coinvolte sul continuum spazio temporale della regione considerata per l'esperimento, previsti dalla relatività generale.

Qualora poi il fascio di luce proiettato dalla nostra torcia fosse abbastanza potente, creerebbe un cono luminoso.
Se invece di puntare al bordo del sole lo indirizzassimo al centro, tutti i raggi emessi che risultano tangenti alla circonferenza del sole verrebbero deflessi e si incontrerebbero di nuovo sullo specchio, per poi separarsi di nuovo e tornare all'origine.
Restando vicini alla sorgente vedremmo allora un cerchio di luce che circonda il sole (una specie di anello luminoso).

Conclusione.
Si è trattato di un semplice esperimento concettuale nato da una curiosità adolescenziale, in cui i calcoli sono stati  eseguiti con gli unici mezzi disponibili allora in quel contesto (una calcolatrice tascabile dei primi modelli, un’enciclopedia ed un testo ritrovato su una bancarella acquistato per  il solo fatto di avere una copertina accattivante).






Elenco progetti.

2020  La frequenza dei numeri palindromi nelle diverse basi (numerazione binaria, terziaria,.. decimale, esadecimale)                 Espa...