Home / index
Curriculum Vitae

Curriculum Vitae [ITALIANO]



Un Curriculum si può rendere anti-proiettile iniziandolo con una affermazione a livello hardware:

always @ ( posedge  clock  )  
 begin                      
 status <= ~status ;
 end                     
[sintassi: Verilog HDL]

Presentazione:

Sono Simon Hasur, uomo, nato 1989, in Europa (Ungheria).

Dopo essere clamorosamente fallito in tutto quello che abbia mai provato, unitamente ad una disastrosa carriera scolastica, pervenni alla programmazione di simulatori, inizialmente in Matlab, dopo in C e dopo C++ . Ho iniziato facendo dei simulatori di guida, inizialmente 2D, poi 3D ; e così ho familiarizzato un po' con la dinamica del corpo rigido 3D: con o senza vicoli, per simulare o corpi rigidi 3D indipendenti, o corpi articolati.

Presto divenni particolarmente interessato alla Dinamica Lagrangiana e il suo uso per simulare numericamente il movimento di meccanismi articolati 3D. Dato che all'epoca esso non era un metodo popolare, era poco documentato. Così, ho iniziato a fare pesanti ricerche su di essa.

Siccome il mio interesse principale erano le simulazioni numeriche, ho notato che per quanto fosse buono, il metodo Lagrangiano non era molto adatto per quel contesto. Così, mi sono organizzato per creare una nuova variante della Dinamica Lagrangiana: una che sia molto più adatta nel contesto dei metodi numerici, e che non abbia il problema delle configurazioni critiche. Sono riuscito a creare questa nuova variante dopo aver messo a punto il mio primo teorema sui Metodi Numerici, che avevo escogitato apposta per questo scopo.

Ho quindi implementato con esso un modulo C++ che permette di simulare tutti i corpi articolari 3D, basta che contengano solo giunture tipiche: sferica, universale, prismatica, o quella ad apertura ; e non contengono catene chiuse di corpi. Un modulo di cui il peso computazionale è proporzionale al quadrato del numero dei gradi di libertà che il sistema ha.

La mia variante modificata della Dinamica Lagrangiana è anche un pò più semplice da capire, più amichevole, di quella originale. Per questo motivo, spero di rendere più popolare la Dinamica Lagrangiana di come non lo sia oggi, realizzando guide sulla sua nuova variante.


Mentre facevo queste cose, progressivamente divenni interessato anche agli Algoritmi. E quando venni a conoscenza del metodo di rendering di terreni ideato da Peter Lindstrom e collaboratori e pubblicato nel 1996, ho iniziato a fare della ricerca originale per mettere a punto un'Algoritmo di rendering di terreni basato sullo stesso schema di triangolazione, ma che sia un'algoritmo di cui il peso computazionale e uso di memoria sia indipendente dalla grandezza del terreno.

Di conseguenza, nei (circa) 2 anni successivi, ho messo a punto 6 teoremi nel campo dei Algoritmi, teoremi quali, nel loro insieme rendono questo possibile. E costituiscono una completa impalcatura teorica per approssimare poligonalmente, analizzare, e random-generare, oltre che visualizzare in tempo reale, terreni (o superfici in generale) : una impalcatura teorica di cui il significato, nel contesto dell'approssimazione poligonale di superfici è attorno a quella della traformata di Laplace nel contesto della teoria e uso delle equazioni differenziali.


L'implementazione dei 3 varianti del mio Algoritmo per visualizzare terreni, scritto in C++, è rilasciato come software Open-Source.
Informazioni dettagliate a riguardo sono sul mio sito:
www.nerdofalgorithms.altervista.org

La variante più significativa dell'Algoritmo è quello che ho chiamato Sistema di Terreno Semplificato Abilitato all'Iniezione di Dati di Altezza: il quale, per funzionare si appoggia ai miei teoremi 0, 2, 4, 5 sull'approssimazione poligonale di superfici ; dove il funzionamenteo corretto è garantito dal teorema 6.

Gli Algoritmi, quasi letteralmente, mi hanno salvato: le cose non mi andavano tanto bene nella vita reale, dove infatti non ero nessuno, e l'unica certezza che mi rimase era il metodo scientifico... ; ma grazie ai Algoritmi, a parte attenermi a qual metodo, mi sono anche fatto un nome e ho creato uno scopo per la mia esistenza, che era stata inutile per tutto il tempo prima.

Oltre alla persante ricerca e le scoperte a cui esse portarono, ho anche fatto molti video riguardanti varie tra le mia aree di competenza: questo perché la comunicazione scientifica è criciale nel rendere disponibili gli strumenti teorici e pratici, a chi potrebbe trarne del beneficio. Spero di farne altri altri, e di più, in futuro. Ho anche creato un rifacimento del primo videogioco di guida 3D che avevo fatto anni fa: il rifacimento si chiama New CTruck3D Rally, ed è rilasciato come software open-source.


Ora ho 26 anni di età.

Di recente pervenni alla fine della fase degradante di un una specie di malattia neurodegenerativa con cui lottavo da 7 anni circa ; perché una cura fu trovata, in grado di arrestare o ridurre ad infinitesimale il suo peggioramento. Avevo notato che nei ultimi mesi si fosse sviluppato un cambiamento nella mia personalità, probabilmente per via di alterazioni neurali che la malattia aveva prodotto al suo culmine ; e constatai che nonappena la malattia fu stata arrestata, ero di fatto una nuova persona. Quel che non fu cambiato era il fatto di avere una vocazione verso il metodo scientifico.

Notai che il grosso cambiamento fu, a parte un forte cambiamento nella personalità, il fatto che non odiavo più così tanto la matematica, e che avevo un fortissimo interesse verso di essa, e che la maggior parte dei dubbi che avevo in quel campo, sembravano essere scomparsi. Forse il cervello, nel tentativo di resistere al degrado, aveva prodotto un massiccio numero di neuroni nuovi, i quali, dopo che la cura iniziò ad essermi somministrata, erano ora pienamente in carica e printi all'uso: non posso esserne sicuro, ma mi piace pensarla così.


Capii che non dovevo fare altro che semplicemente applicare la definizione, e usare le risorse messe insime dalla persona che ero stato prima, e aggiugere le mie nuove risorse. E poi andare avanti a a risolvere problemi ed elaborare metodi, come un Bulldozer spinto con l'acceleratore a tavoletta. Ora non solo nel campo dei Algoritmi, ma anche nel campo della Matematica Applicata.


Mi accorsi che adesso, oltre ai Metodi Numerici, avevo un forte interesse anche nell'intero sottofondo teorico riguardo alle equazioni differenziali, e tutte le loro applicazioni.


Volevo contribuirci. Così, ho preso il mio pimo teorema su Metodi Numerici, e mi accordi che lo si poteva usare per mettere a punto metodo molto veloce per simulare numericamente oscillazioni medie (oscillazioni un po' più grandi di quelle piccole) di sistemi dinamici. Ho messo a punto il metodo, e ho dimostrato che che fosse corretto, nel mio secondo teorema sui Metodi Numerici. Un teorema che definisce, oltre al metodo numerco in sé, anche una vera e pripria classe di equaioni differenziali.

Usando questi risulatato, prevedo di creare presto un piccolo pacchetto software per fare simulazioni veloci di corpi articolati che esibiscano oscillazioni da piccole a medie.


Adesso sto smanettando un po' con alcuni tipi particolari di equazioni differenziali parziali e sto lavorando su un terzo mio teorema sui Metodi Numerici. E con alcune nuove tecniche per l'animazione 3D semi-realistica, da usare in videogiochi o semplici animazioni 3D o visualizzazione scientifica.

Per quanto riguarda lo sviluppo di videogiochi, intendo presto fare una nuova versione del gioco New CTruck3D Rally : una versione in cui si vada in giro su un terreno generato casualmente, supportato dall'algoritmo Sistema di Terreno Semplificato Abilitato all'Iniezione di Dati di Altezza che ho sviluppato prima. Di recente, sono diventato interessato anche al fare 2-3 mini-giochi: usando alcune delle nuove tecniche di animazione semi-realistica, con le quali ho sperimentato nei ultimi tempi. Recently, I became interested also in making 2-3 mini-games: using some of the new semi-realistic animation techniques I've been experimenting with lately.


Per concludere questa presentazione, riporto una delle citazioni preferite delle persona che ero prima:
"Dato lo stato della nostra società, assimilabile ad una specie di moderna Casa Creapacuore, non temo la vittoria dell'intelligenza umana o artificiale, ma del maiale e del ratto." (Andrew Hodges, 'Alan Turing: the enigma' [1991])

E uno schema seplificato di come la mia attività è andata avanti nei diversi campi che ha interessato.

                 /---> Sviluppo di Videogiochi ----------------------------\
Videogiochi --->(                                                           )---> Algoritmi   + Matematica Applicata <---- danno neurale 
                 \---> Simulatori ---> Metodi Numerici ivi usati ----------/

Nel resto di questo curriculum potete trovare una collezione ordinata di brevi descrizioni, ona per ciascun problema o area-di-priblemi che ho risolto e con cui infine ho realizzato un programma per computer: la maggior parte delle descrizioni hanno anche un video allegato, il quale mostra le cose più direttamente, e va un po' più nel dettalglio rispetto alle sole descrizioni a parole. Dopotutto, nella comunicazione scientifica si adoperano simultaneamente testo, figure, formule e anche riprese video ; al fine di rendere la comunicazione più univoca, chiara e precisa che si può. Quindi, in un curriculum orientato per lo più ad attività scientifiche, perché dovebbe essere troppo diversamente?
Buon divertimento!


data: Luglio 2015
luogo: Lecco e dintorni, Italia





Problemi risolti e programmi scritti ( quello che nel linguaggio burocratico si chiama "Esperienza professionale" )

Segue una lista di problemi risolti e relativa spiegazione, presentati in ordine ; con un video allegato alla fine della maggior parte dei punti.


14 )
[TRADURRE IN ITALIANO] Creation of detailed documentatin for the L.D.N.F.S articulated-body simulator ; in form of video, as well as text. While documenting, I also deviced my first theorem on Analytical Mechanics and one on Differential Equations: although the simulator doesn't need them as it relies only on my first theorem on Numerical Methods to function, these other 2 theorems come in very useful for a clearer and much more solid documentation on how the software works.

< FROM: 2015-07-01| TO: 2015-09-04>

[TRADURRE IN ITALIANO] I created detailed documentatin for the L.D.N.F.S articulated-body simulator: in form of video, as well as text (in HTML format with nice figures and tables. HTML to make it easy for online-reading as well as printing on paper ). While doing so, I accidentally discovered some facts about the lagrangian equations of motion and their use in a numerical simulation. I investigated a bit, and deviced my first theorem on Analytical Mechanics and my first theorem on Differential Equations: although the simulator doesn't need theme as it relies only on my first theorem on Numerical Methods to function, these other 2 theorems come in very useful for a clearer and much more solid documentation on how the software works.

All information is on the default homepage of the simulator, www.nerdofalgorithms.altervista.org, where it has it's own dedicated section. To be sure, the documentation-videos whall be linked also on the simulator's page on SourceForge.net for the eventuality of accidental shortages of the www.nerdofalgorithms.altervista.org website.


video attachment n.14:
not made.


image not available.

13 )
[TRADURRE IN ITALIANO] Release (as open-source software) of the articulated-body simulator which I have developed years before ; now tidyed up and reverted into its implementation in standard C. I have called the simulator Lagrangian Dynamics' New Flavour Simulations: the documentation-page is on my hompage.

< FROM: 2015-07-01| TO: 2015-09-04>

[TRADURRE IN ITALIANO] I released (as open-source software) the articulated-body simulator which I have developed years before ; now tidyed up and reverted into its implementation in standard C. I have called the simulator Lagrangian Dynamics' New Flavour Simulations: the documentation-page is on my hompage www.nerdofalgorithms.altervista.org.

For a quick overwiev of the simulator, I made a short video-presentation of it, linked below as well as on it page on SourceForge.net .


video attachment n.13:
https://youtu.be/CnyZZZgzrrg


image not available.

12 )
[TRADURRE IN ITALIANO] Development of a fast simulation method for articulated bodies exhibiting mid-oscillations (i.e.: for the simple pendulum, stay withing 60 degrees displacement)

< FROM: 2015-06-01| TO: 2015-07-04>

[TRADURRE IN ITALIANO]
A sort of neural problem in the brain, I had been battling with for a few years, had culminated before being arrested by a chemical cure which was discovered. I realised that I was changed a lot. As a matter of fact, I was a new person: probably because of some neural alterations which the illness eventually produced. Anyway just a change of personality, however heavy it be.

What was not changed, is the fact of being subject to a sort of constraint-force driving me to stick to the Scientific Method.


I soon realized that what had changed instead was, that I did not hate mathematics so much anymore, and that most of the doubts I used to have about it, had disappeared.
I had now an utterly strong interest in Applied Mathematics.
By simply applying the definition, I understood that it was time to act.

And just as a many-tons airplane at some point gently takes off and a new landscape to discover is in front of it, I had turned into a new person and a new life, full of discoveries, was in front of me.



So. I rewised complex analysis, and begun to explore more advanced topics on differential equations, and wanted to contribute : I realized that my first theorem on Numerical Methods could be used to device a very fast way to numerically solve for the Lagrangian Equations of Motion in the case of a 3D articulated body (or anything similar), in the case it exhibits mid-oscillation (oscillations a bit larger than small-oscillations). So, I deviced a second theorem of mine on Numerical Methods: which defines the above-mentioned method, and allows also to analytically study the equations of motion. As a corollary, I added the way to generalize the method to systems of n-th order differential equations, which so define also a new class of not-so-complicated differential equations.

With this results at hand, I plan to make a nice small, minimalistic C++ module to do fast simulations of articulated bodies exhibiting mid-oscillations. Since in the meantime I had been playing around also with various types of differential equations, some ideas occured to me. I also resumed in fact an idea I had had in the past few months: devicing some semi-relistic animation technique for articulated bodies.

I have now some results I am going to test soon, for 2 different areas: 1 method for 3D articulated bodies, another for the animation of either cloth-like things, flags, tissues, or things like ropes.

Since the purpose of these methods is to provide a simple way to achieve some compromize between serious realism and just good look, I became interested in making mini-games too.


In the meantime I also deviced an alternate proof for my first theorem on Numerical Methods. It's nice to have 2 different proofs for the seme things: so there is choice for different tastes. After all, it's we, human beings that do the mathematics: and we have different tastes and styles.


To change topic, I also started to evalute some nice application of the terrain-rendering Algorithm I deviced before: I realized that a nice flight-simulator would be the most appropriate.

I bacame interested in aerodynamics too: after all, if a new life has begun, also some new fields of interest must begin, even without deleting the preexisting ones: but just causing them to be seen from a new point of view.


video attachment n.12:
not made.


image not available.

11 )
Creazione e rilascio di una variante dell'Algoritmo Simplified Terrain System ( Sistema di Terreno, Semplificato ) che avevo sviluppato prima: per creare il Height-data Injection Enabled Simplified-Terrain-System (Sistema di Terreno, Semplificato ; Abilitato all'Iniezione di Dati di Altezza)

< FROM: 2015-05-01| TO: 2015-06-04>


Ho investigato il l'Algorithmo Simplified Terrain System ( Sistema di Terreno, Semplificato ) che ho sviluppato prima, per vedere se si potevano iniettare dati di altezza nella procedura, di volta in volta ; per simulare - letteralmente - il la visualizzazione di una mappa di livello, ai punti del quale si pu accedere solo in una maniera simile al full-streaming.
Una investigazione che ho intrapreso perch con l'algoritmo standard (il Simplified Terrain System per come viene chiamato nell'articolo che ne documenta entrambe le varianti) renderebbe molto difficile iniettare dati di altezza nella superficie poligonale che rappresenta il terreno, nel momento in cui si aggiunge del dettaglio in una certa regione di essa.

Ho messo a punto il mio teorema 5 sull'approssimazione poligonale di superfici per dimostrare che ci possibile, e per ottenere la procedura che dice come farlo.

I paesaggi che crea appaiono abbastanza naturali: cos l'esperimento - per dira cos - andato a buon fine. Per il resto, valgno le stesse cose che pr il Simplified Terrain System: informazioni dettagliate si trovano nell'articolo che lo documenta ( sul seguente sito: www.nerdofalgorithms.altervista.org ) e nel punto precedenti di questo Curriculum (e il video allegato a esso). Il video molto importante in questo caso, quindi tagliamo corta la presente discussine verbale.

Come detto nel punto precedente, la variente dell'Algoritmo di rendering-di-terreni alla base di quello che bara - per dire - nel passare da una distribzione di aree pi e mano dettagliate (un blockset ("insieme di blocchi") per come chiamata nell'articolo) ad un'altra distribuzione. Bara, nel senso che non pi aggiungere dettaglio ovunque, ma solo un un particolare sottoinsisieme di regioni. Questo non un problema in s, inquanto questa soluzione di 'barare', rende l'Algoritmo complessivamente pi veloce ; ma soprattutto, pi che dire che non un problema, volevo dire se, e quanto, questo fatto di barare impatta sulla qualit visiva dell'approssimazione poligonale della superficie mentre essa cambia dinamicamente.


Dopo un bel po' di investigazione teorica, ho messo a punto un teorema, il mio teorema 6 sull approssimazione poligonale di superfici, il quale garantisce che 'Algoritmo funziona sempre bene, anche se non sempre ugualmente bene. Il teorema delinea anche quanta 'flessibilit' essa ha al momento, nel cambiare la quantit di dettaglio che hanno le varie regioni della superficie visualizzata.


[TRADURRE IN ITALIANO]
....various portions of the surface being rendered. This is a very interesting point, but this is not the place to discuss it.


So, said shortly, the nice thing is that not only the rendering system works as expected, but also that the theorems underlying its operation, namely my theorems n. 0,2,4 and 5 on polygonal surface approximation, provide a full and complete framework to work with polygonally approximated surfaces, including static and semi-random surface-modeling, alongside with real-time rendering of it, clearly.
While theorem 6 says how and why it works and in which contexts ; and says that the theoretical and practical use of this framework in the context of polygonal surface approximation (or computational geometry more in general), is equal to that of the Laplace-transform in the context of the theory of differential equations.


video attachment n.11:
https://youtu.be/2R5sLfQAtMs


image not available.

10 )
Creazione e Rilascio dell'implementazione in C++, di una variente semplificata ma pi veloce dell'Algorithmo di Rendering di Terreni o approssimazione poligonale di superfici che avevo sviluppato prima

< FROM: 2015-04-01| TO: 2015-05-04>

Ho avuto l'idea che il passaggio 3 dell'Algoritmo di rendering di terreni che avevo sviluppato prima ( che ho chiamato New Terrain System ), poteva essere sostituita da una serie di verifiche messe sel passaggio 1 e 2 cos permettendo letteralmente di barare nel compito di assicurare il passaggio da un'insieme di blocchi legale ad un'altro insieme di blocchi legale. Ho messo a punto il mio teorema 4 sull'approssimazione poligonale di superfici, e usandolo, ho creato e implementato (in C++) l'Algoritmo Simplified Terrain System

Esso, olre ad essere notevolmente pi veloce dell'Algoritmo originale ( quello che ho chiamato New Terrain System ), ha alcune propriet davvero interessanti, i quali non sono discussi qui ma sono affrontati nell'allegato video e in ricerche successive.


video attachment n.10:
https://youtu.be/j0cEMqJje9w


image not available.

9 )
Rilascio dell'implementazione in C++ dell'Algoritmo di visualizzazione di terreni o approssimazine poligonale di superfici che ho elaborato nei scorsi 2 anni

< FROM: 2015-04-01| TO: 2015-05-04>

Ho rilascio l'implementazione in C++ dell'Algoritmo di visualizzazione di terreni o approssimazine poligonale di superfici che ho elaborato nei scorsi 2 anni. Puo essere scaricato tutto dal seguente link:
https://sourceforge.net/projects/newterrainand3dmapsystem
E' presente sia la implementazione multithread, che quella semplice.

Inoltre ci sono altri 2 pacchetti in cui, sopra il terreno c'e' il modulo per la visualizzazione di una rete di strade multilivello, che avevo sviluppato prima (ne trovate una descrizioe e video in allgato tra i punti precedenti di questo curriculum).
Per questo ho anche aggiunto un piccolo modulo che mette dei alberi qua e la' sul terreno, per renderlo piu' naturale.

C'e' anche un pacchetto composto in cui sopra il terreno ed eventualmente sopra la rete di strade, su pu andare in giro con dei veicoli dotati di un movimento semirealistico.

La documentazione ed il rilascio di una versione semplificata del modulo del terreno, e' in preparazione. A proposito di questo, gli sviluppi comunque non finiscono perche' nel mentre, accidentalmente ho scoperto un'altra proprieta' relativa allo schema di poligonalizzazione di una superficie usata dall'Algoritmo: e sto mettendo appunto il mio quarto teorema sull'approssimazione poligonale di superfici. Un teorema che dovrebbe permettere la messa appunto di una versione semplificata -ma comunque fnzionanate-, un po' piu' leggera di quella originale, ma piu' semplice, piu' corta, e che fa a meno dell'so del primo teorema che e' un po' ostico.

Questo, oltre all'importanza dal punto di vista teorico, constituisce inoltre una svolta dal punto di vista di una documentazione chiara, semplice e per molti sicuramente anche divertente: dato che dopo una variente semplificata dell'Algoritmo, la variante piena e' piu' semplice da capire inquanto i concetti fondamentali sono gia' stati introdotti tramite un'Algoritmo piu' semplice, che tuttavia differisce da quello pieno solo per un passaggio... che per quanto sia importante, e' solo 1 passaggio.


video attachment n.9:
not made.


image not available.

8 )
Apprendimento di 2 nuove professioni per adaguarmi alla grave crisi del Mercato del Lavoro: lo sviluppo Web, e la progettazione di sistemi digitali adoperanto il Verilog come principale strumento di progettazione, su una scheda FPGA

< FROM: 2015-05-15| TO: 2015-01-22>

Dividiamo la discussione in 2 parti, svoltesi contemporaneamente : l'unica eccezione che il primo evento delle 2 elencate iniziato un po' prima.

1. Ho iniziato ad interessarmi alla progettazione di sistemi digitali con strumenti al passo coi tempi, come gli FPGA. Ho deciso di adoperare come principale strumento di sviluppo il linguaggio di descrizione hardware Verilog. Ho imparato un po' a progettare sistemi digitali di media complessit smanettando con una scheda FPGA di nome DE0-nano della ditta Altera(R). Dopo aver acqusto le basi, nel tentativo di creare cose un po' pi evolute, mi sono scontrato ben presto con la tipica problematica dei sistemi digitali, cio la metastabilit, la quale va evitata. Sono riuscito a fare quel poco che volevo, quindi va bene. Molto bello come argomento, anche se non vorrei fare lo sviluppatore FPGA a meno che paghino tanto tanto.

2. Con l'aiuto di un mio amico, ho appreso le basi dello sviluppo web, o meglio dire sviluppo di siti web. Adoperando come principali strumenti di sviluppo il linguaggio PHP, e il linguaggio SQL per usare un database di tipo MySQL (o simile). Ho quindi creato il sito
www.nerdofalgorithms.altervista.org
il sito progettato per ospitare il primo articolo scientifico in cui ci sono varie figure proceduralmente generate: con dei piccoli script scritti in PHP, dove l'uscita grafica finale fatta con della semplice grafica (vettoriale) SVG. Sito che al da quel momento ha iniziato a ospitare vari articoli scientifici caratterizzati dalla presenza di figure generate proceduralmente.
Sito web che, dalla sua creazine, offre progressivamente sempre pi contenuto nei seguenti ambiti: algoritmi, metodi numerici, etc.


video attachment n.8:
not made.


image not available.

7 )
Creazione di un videogioco di guida fuoristrada 3D, usando il C++ ; col mio Algoritmo di Rendering

< FROM: 2015-03-15| TO: 2015-03-22>

Ho preso l'implementazione multithread (semiparallela) dell'Algoritmo di Rendering di Terreni ( o Superfici ) che ho sviluppato prima, a l'ho usato per fare un remake completo e rinnovato del primo videogioco 3D che avevo fatto tanti anni prima ; un gioco di guida che avevo chiamato CTruck3D :
il remake si chiama New CTruck3D Rally. Che pu essere scaricato dal seguente link (in forma di codice sorgente C++ pronto da compilare e usare su sistemi *nix):
https://sourceforge.net/projects/newctruck3drally/

Di solito gli uomini chiamati agli Algoritmi non hanno tempo ed energia rimanente per creare videogiochi, anche se il potere di un'Algoritmo spesso illustrato al meglio da quel che pu fare in un videogioco.

Ma avevo gi pronte le procedure di simulazione semirealistica per le auto, dal tempo in cui le avevo incapsulate in classi C++ quando ero ancora un nerd di videogiochi e non un nerd di algoritmi. Quindi ho semplicemente fatto lo sforzo di combinare 2 moduli: il rendering del terreno ed una imitazione pi o meno realistica del movimento di un'autovettura. Ha tutte le funzionalit cruciali, ma spero di rilasciare in
seguito una versione pi rifinita.

Un tributo ai giochi ci voleva: visto che sono pervenuto ai Algoritmi da l.

Buon divertimento!


video attachment n.7:
http://youtu.be/I3QvCTdxryE


image not available.

6 )
Implementazione multithread in C/C++ di un'Algoritmo in parte parallelo

< FROM: 2015-02-01| TO: 2015-02-20>

Ho preso l'implementazione che avevo fatto (in C++) dell'Algorimo di rendering di terreni e/o superfici (o semplicemente: approssimazione poligonale di superfici) che ho sviluppato prima, e ne ho creato una implementazione migliorata che sfutta il multithreading per svolgere in parallelo alcune parti della procedura ( dato che molte sue parti sono intrinsecamente parallele).
Ho quindi ottenuto una implementazione che circa doppiamente efficace: come auspicato, oltre che previsto dal primo teorema.

Lo potete vedere nel video in allegato.

Vedrete che di fianco a quello classico, ho anche provato un nuovo tipo di texturing, che si dimostrato avere delle propriet interessanti, dato che lo si pu usare anche quando sia la heightmap sia la texmap sono accessibili esclusivamente in full-streaming. Nel video vado un po' pi nel dettaglio a riguardo. Ma soprattutto importante il fatto che questo metodo funziona benissimo anche se la texmap non disponibile ma ci si accontenta di una colorazione procedurale in cui il colore di della superficie in un punto dipende esclusivamente dall'altezza del medesimo in quel punto: come le cartine geografiche... uguale ; ma con sopra una o qualche texture ripetuta a scacchiera per dare una apprenza un po' pi naturale al terreno.
Certo non il tipo di texturing che si vede tipicamente nei videogiochi (all'inizio ero impressionato anche io), ma ci non toglie il fatto che se si vogliono prestazioni buone e si vuole anche mantenere la semplicit sorprendente dell'Algoritmo, quel tipo di texturing una grossa opportunit.
Naturalmente si pu anche usare la texturing classica, anche se lo schema di triangolazione usato da questo Algoritmo non si presta gran ch bene a ci.

Inoltre ho gi iniziato a lavorare sull'ultimo dettaglio: una implementazionze che acceda all' heightmap e texmap in full-streaming, usando la libreria libpng (e non SDL) che permette di farlo.
Sebbene quest'ultimo possa sembrare un dettaglio, idealmente si potrebbe riuscire a far sposare l'Algoritmo di rendering con i vantaggi di questo formato di immagini, e ci avrebbe varie applicazioni. Il mio terzo teorema sull'approssimazione poligonale di superfici punta in questa direzione.
In ogni caso andr bene anche un buon compromesso.

L'articolo che illustra per intero questo Algoritmo, tuttora in preparazione: l ci saranno tutti i dettagli per cui qui non c' spazio.


video attachment n.6:
http://youtu.be/tTiMxOHMTgg


image not available.

5 )
Ricerca teorica nel campo dei Algoritmi, e programmazione in C/C++

< FROM: 2014-12-01| TO: 2015-01-30>

Utilizzando il mio secondo teorema sul rendering di terreni ( e/o approssimazione poligonale di superfici ), ho messo a punto la versione definitiva dell'Algoritmo di rendering di terreni che avevo sviluppato prima.

Un metodo semplice che chiunque pu capire e usare, facilmente.

Il video in allegato illustra la cosa, almeno a livello di impressione:

Questa versione di per s non aggiunge nulla alla prima, ma lo rende pi leggero (meno operazioni necessarie per dare 30 frame al secondo). Sia il peso computazionale, sia l'uso di memeoria, sono direttamente proporzionali alla quantit di dettaglio che capita nell'inquadratura corrente ( quindi un'Algoritmo a tempo lineare). Dove la quantit di dettaglio si intende il numero di blocchi tipici del metodo presenti (il video allegato al punto exp precedente spiega tutto a riguardo).

Come auspicato, il peso computazionale dell'Algoritmo NON dipende dalla grandezza del terreno ; e naturalmente il terreno pu essere grande quanto si vuole: il che era uno degli obiettivi, inquanto un buon algoritmo non dovrebbe porre limiti particolari alla grandezza dell'insieme di dati su cui lavora (si pensi ad un'algoritmo di ordinamento usato in un comune software di management: se si fermasse a 1000 nomi da ordinare in afabetico, saremmo belli che fritti).

Ecco quindi un'elenco riassuntivo delle caratteristiche dell'Algoritmo:
0. Terreno grande quanto si vuole : un metodo che accede all'heightmap in full-streaming.
1. Distanza di visibilit illimitata: da un'opportuno punto, volendo si pu vedere tutto il terreno.
2. Uso di memoria e peso computazionale circa fisso: 16 MB di memoria al massimo, e peso k*n, dove n il numero di blocchi correntmente presenti nell'inquadratura... tipicamente cene sono 600-3000, e k la solita costante che ciascuno si immagina come vuole. Concretamente, su un computer con 1 processore a 2 GHZ circa, fino a 3000 blocchi va liscio ; entro 1500 blocchi va liscio su un computer con 1 processore da 600 MHZ 1.6 GHZ.
3. Aggiusta il Livello di Dettaglio a seconda dell'inquadratura e costante della prospettiva (o distanza focale della della telecamera virtualle che inquadra il tutto).

L'articolo che illustra per intero questo Algoritmo, in preparazione: l ci saranno tutti I dettagli per cui qui non c' spazio.
Mentre per il resto ne seguiranno altri 2.


video attachment n.5:
http://youtu.be/-V2z5HChU2o


image not available.

4 )
Ricerca e Sviluppo in ambito Algoritmi, e programmazione in C/C++: ho messo le basi per un metodo di rendering di terreni o superfici, che abbia lo stesso schema di triangolazione di quello di Peter Lindstrom & co, ma usi poca memoria

< FROM: 2014-08-01| TO: 2014-12-01>

Tempo prima avevo acquisto consistente esperienza con l'uso dell'approccio al rendering di grandi terreni ideato da Peter Lindstrom e collaboratori ; e avevo ideato alcuni accorgimenti per potenziare l'approccio, e li ho implementati. In accordo cui molti test che ci ho fatto, gli accorgimenti erano buoni, ma sia l'implementazione sia l'Algoritmo nel suo complesso era troppo lungo e complicato con prestazioni scarse e abuso di memoria pesante. Mi ero documentato su 2 versioni migliorate dell'algoritmo sviluppati dallo stesso P.Lindstrom e V.Pascucci, ma essi usavano troppa memoria ed erano complicati.

Dopo varie indagini, ho trovato che la causa primaria dei inconvenienti era la stuttura di dati alla base dell'Algoritmo:
una struttura ad albero, pi precisamente un quad-tree.
Ho sviluppato quindi un'Algoritmo nuovo che giunge al medesimo risultato -una superficie triangolata s'intende - ma tramite una procedura completamente diversa, pi corta e molto pi efficace: che abbandona completamentente la stuttura di dati alla base del metodo classico... il quad-tree.
E usa invece un semplice vettore (inteso come una fila di contenitori tutti dello stesso tipo). E il numero di operazioni fatte dalla procedura di rendering dipende rigorosamente solo dal numero di blocchi correntemente presenti nel rendering: dove i blocchi sono quelli del metodo originale... considerando che bastano 1000-2000 blocchi anche per un rendering eccellente indipendentemente dalla grandezza del terreno. L'Algoritmo finale aggiusta il livello di dettaglio
dipendentemente dall'inquadratura, quindi il mio un'Algoritmo di rendering (di terreni ), di tipo Livello di Dettaglio Continuo dipendente dall'inquadratura ("View-Dependent CLOD").

In allegato il video completo, sul programma completo di tutto. ( per scrupolo riporto anche il link del vecchio video provvisorio:
http://youtu.be/RjsF1Is4QEM )

Il cambio radicale delle fondamenta dell'Algorimo di rendering - che dia per lo stesso risultato dell'Algoritmo originale - richiedeva pero di fare praticamente tutto al contrario. Anzich basarsi (quasi interamente) sulla sottrazione di dettaglio - diciamo semplificazione -, la nuova implementazine si sarebbe basato sull'aggiunta di dettaglio.
Non essendo per certo che si potesse arrivare al giusto livello di dettaglio in ciascuna regione del terreno anche in questo modo, non mi era rimasta altra scelta che procedere con dimostrazioni matematiche (dove ho usato il principio di dimostrazione per induzione).
Prima ho dimostrato che il tutto fosse possibile nell'insieme, e poi procedetti a scrivere il nuovo Algoritmo di rendering per grandi terreni: ma pi corto, pi semplice e pi efficace.
La nuova implementazione l'ho effettivamente riscritto completamente da zero tranne 2-3 procedure ausiliarie:
il codice sorgente, pur essendo semplicissimo, strutturato in modo da sfruttare bene l'approccio OOP alla programmazione per come proposto dal linguaggio C++. Nell'implementazione, ho adoperato infatti la classe (templated) vector della libreria standard del C++.

L'Algoritmo nuovo usa pochissima memoria (decine di MB appena) e con una piccola modifica (accennata nel video)
pu elaborare e renderizzare tanti GB di dati relativi ad un terreno anche nel caso in cui questi sono su un file, o sono accessibili tramite qualche sorta di accesso tipo streaming. Ho da poco verificato la correttezza di questa modifica, per cui una soluzione naiva va gi bene: tuttavia ho messo appunto un secondo teorema che fornisce un modo molto pi ottimale per farlo. Quel miglioramento sar pero studiato in un prossimo progetto di ricerca. L'Algoritmo molto adattabile a diverse esigenze, e le varie possibilit saranno studiate l.
L'intensa ricerca teorica e pratica per mettere appunto questo Algoritmo, stato motivato dall'intento di fare un bene a chi di interessa o si serve di metodi di rendering. Infatti ne ho gi iniziato a stendere una serie di 3 articoli informali e comprensibili da tutti.


video attachment n.4:
http://youtu.be/fPow5pTVtdc


image not available.

3 )
Programmazione in C/C++ in ambito Algoritmi, Metodi Numerici, e Computergrafica 3D

< FROM: 2014-04-01| TO: 2014-07-30>

Ricerca e sviluppo circa un metodo di rendering 3D e rilavazione del contatto/collisione specializzato per un tipo di poliedri non-convessi: quelli tipicamente formati da un tratto di strada, in genere curvilineo.
Ero partito da un'idea gi parzialmente implementata in algoritmo (col longuaggio C) anni prima, testata con successo.
Per poi procedere allo sviluppo di una libreria completa e coerente per il linguaggio C++, che offra pieno supporto per la creazine di progammi simili a Google Maps ma interamente 3D, con una rete di strade multilivello (sottopassaggi e sopraelevate supportate senza limiti particolari) e tratti anche curvilinei ; eventualmente con inclinazione laterale e altre caratteristiche variabili lungo il tratto.

Il video in allegato illustra la cosa in dettaglio.

Il fatto di essere 3D non sarebbe molto utile se non si potesse adagiare la rete di strade su una qualche approssimazione del terreno nei pressi: infatti il terreno e l'adagiamento dei tratti di strada sopra di esso incorporato.
Oltre al rendering (leggero e semplice), l'obiettivo di questa libreria di abbinare al rendering 3D delle strade un supporto pieno anche per una comoda interfaccia mouse, con un sistema di etichette informative, tracciamento a colori di percorsi vari e giustamente una gamma di algoritmi per la ricerca di percorsi minimi e cose simili.


video attachment n.3:
http://youtu.be/R5ACL1bLccY


image not available.

2 )
Ricerca e Sviluppo nel campo dei simulatori 3D: sviluppo di una procedura di simulazione in C/C++, per la dinamica dei corpi articolati ; una procedura interamente basata sulla Dinamica Lagrangiana, ma ormai privata di tutti suoi inconvenienti nel contesto dei simulatori 3D

< FROM: 2013-01-01| TO: 2013-06-30>

Ho fatto Ricerca teorica e infine l'implementazione di una variante potenziata del engine fisico che avevo sviluppato prima: sempre interamente basato sulla Dinamica Lagrangiana, ma questa volta senza i difetti tipici di questo metodo, e con una stabilit numerica migliorata e massima preservazione delle cifre significative. Dndo alla luce un engine di simulazione specializzato nei corpi articolati ma senza alcuna limitazione in questo campo.

Ho implementato con esso vari simulatori di test, di cui il test decisivo fu la simulazione di un veicolo a 4 ruote, 14 gradi di libert, senza approssimazioni. Ho anche abbozzato una variante dell'engine inteso per un possibile rilascio in futuro come libreria open-source separatamente per C e C++, pi facile da usare ma limitato ad articolati con i meccanismi di giunzione tipici (prismatico, rotante, sferico, universale) [vedi punto di esperienza n.14 per l'effettivo rilascio].


video attachment n.2:
not made.


image not available.

1 )
Programmazione in C/C++, in ambito Algoritmi

< FROM: 2013-01-01| TO: 2014-01-01>

Partendo da una infarinatura generale preesistenete sui engine grafici 3D ed engine da gioco 3D, ne scelsi una branca da approfondire. Scelsi il Rendering dei Terreni, utile per simulatori di guida e di volo. Avendo gi un certo interesse verso gli Algoritmi in generale, scelsi un metodo che sia interessante in tal senso: preferii l'approccio ideato da Peter Lindstrom e compagnia, lo scrissi in C++ da zero, e infine lo adattai implementandone una procedura ottimizzata e particolarmente acuta per l'esecuzione "in sottofondo" con multithreading. Ho approfondito ulteriormente OpenGL.

In allegato un video che illustra la cosa.

Bazzicare quel metodo, un algoritmo assai colorito, ha affinato il mio senso e interesse verso il campo dei Algoritmi in generale:
quindi da questa esperienza in poi ho sempre cercato di ritagliare un po' di tempo da dedicare ai Algoritmi, inclusi i metodi numerici anche, con particolare riguardo all'Ottimizzazione e lo sfruttamento del multithreading.


video attachment n.1:
http://youtu.be/VHIG6LF82kg


image not available.

0 )
Ricerca e Sviluppo sulla possibilit di applicare la Dinamica Lagrangiana nella simulazione numerica del moto dei corpi articolati 3D, e programmazione in C/C++ di un simulatore basato su quel metodo

< FROM: 2010-01-01| TO: 2013-01-01>

Ho fatto Ricerca e Sviluppo sulla possibilit di applicare la Dinamica Lagrangiana nella simulazione dei corpi articolati nei videogiochi 3D e applicazioni simili ; seguta dall'effettiva implementazione in linguaggio C di una procedura di simulazione (physics engine) interamente basato su quell'approccio. Fuzionava ma aveva ancora 2 tipici difetti del metodo Lagrangiano: la presenza di configurazioni critiche che una volta reaggiunter portano alla divisione per zero, oltre allo spreco di cifre significative nel caso di configurazioni vicine ad una configurazione critica ; e l'abuso delle funzioni sin() e cos() che sono lente rispetto a funzioni definite con sole somme e moltiplicazioni di variabili. Implementando vari simulatori di test, avevo inziato a valutare varie possibilit per sviluppare una variante alternativa che elmini questi difetti. In preparazione ad una seconda tranch di ricerca e sviluppo, ho incapsulato l'engine fisico fatto, in un una classe del linguaggio C++ : ci ha contribuito a sveltire gli sviluppi successivi.

In breve, ho gettato le basi per quello che divenne poi la mia area di competenza primaria. Approfondii molto i Metodi Numerici e le questioni dell'ottimizzazione (velicit di esecuizone / prestazioni del software).
Inoltre l'uso delle coordinate generalizzate, intrinseco al metodo, ha acuto la mia attenzione verso l'effetto sulle simulazioni e animazioni, del numero limitato di cifre significative che ciascuna variabile ha all'interno di un software di simulazione numerica.


video attachment n.0:
not made.


image not available.