Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS...

24
Progetto Fireworks Simulatore di spettacoli pirotecnici “Linguaggi e Modelli Computazionali LS” Francesco Ferri

Transcript of Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS...

Page 1: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Progetto FireworksSimulatore di spettacoli pirotecnici

“Linguaggi e Modelli Computazionali LS” Francesco Ferri

Page 2: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Obiettivi di progetto

• Definire un interprete per il linguaggio definito.

• Generare una simulazione in grafica 2D in grado di riprodurre spettacoli pirotecnici il più fedelmente possibile.

• Realizzare un linguaggio in grado di descrivere uno spettacolo di fuochi artificiali.

Luci e spari.

Condizioni atmosferiche.

Strutturato.

Suoni.

Espressivo. Di facile comprensione e utilizzo.

Page 3: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

ScreenShot

Pannello principale

Pannello per la simulazione

Struttura ad albero della simulazione

Stima durata simulazione

Barra di scorrimento temporale

Posizione Cursore

Page 4: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Grammatica 1/4

<Fireworks> = Impostazioni<Impostazioni>Fine{<Batteria>}<EOF>

<Impostazioni> = <Sfondo>;<VelocitaSimulazione>;<Meteo>;

<Batteria> = Batteria{<Istruzione>;}Fine

<Istruzione> = <Sparo>|<Intervallo>|<Colore>

SCOPO

STRUTTURA DEL LINGUAGGIO

Page 5: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Grammatica 2/4

<VelocitaSimulazione>=Velocita(<Velocita>)

<Velocita>=Alta|Media|Bassa

<Sfondo>=Carica(<Id>)

<Meteo>=(Sereno|<NonSereno>)

<NonSereno>=<Precipitazione>,<Num>,<Num>

<Precipitazione>=Vento|Pioggia|Neve

VELOCITA SIMULAZIONE

SFONDO

CONDIZIONI ATMOSFERICHE

Page 6: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Grammatica 3/4<Intervallo>=Ritardo(<Num>)

<Colore> = Colore(<Num>-<Num>-<Num>)

<Sparo> = Sparo(<TipoSparo>: <ParametriPosizione><ParametriLuce>,<Scia>,<Scoppio>)

<ParametriPosizione> = <Num>,<Num>,<Num>

<ParametriLuce> = <Num>,<Num>,<Num>,<Num>,<Num>

<TipoSparo> = Girandole | StelleFilanti | Puntini

<Scia> = Scia_Si | Scia_No

<Scoppio> = Secco | Normale | Sfrigolante

ATTESA

COLORE

FUOCHI

Page 7: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

< Num: ( ["1"-"9"] (["0"-"9"])* | "0" ) >

< Id: ( ["a"-"z"] (["a"-"z"]|["0"-"9"]|"."|"\\"|":\\")* ) >

NUMERI POSITIVI

IDENTIFICATORI

Grammatica 4/4

Page 8: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Struttura del linguaggio

Impostazioni

Fine

[ Impostazioni generali ]

Batteria

Fine

[ Istruzioni ]

1

1..N

Page 9: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Il linguaggio 1/3

Impostazioni

Fine

Sfondo(Capodanno_a_Venezia.jpg);

Velocita(Media);

Meteo(Pioggia,10,30);

E’ possibile impostare una immagine di sfondo.

Si richiede di specificare una velocità di simulazione: Alta(10x), Media(5x) o Bassa(1x).

Indicazioni di condizioni atmosferiche: Sereno oppure Vento, Pioggia o Neve e indicazione di intensità e direzione.

Dominio [0+K*180 - 180+K*180] con K ≥ 0

Page 10: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Linguaggio 2/3

Fine

Batteria

Ritardo(5);

Colore(200-120-80)

Sparo(<Tipo><Param. posizione><Param.luce><Scia><Scoppio>)

Impostazione di un ritardo dall’ultima esplosione.

Colore dello sparo.

Fuochi artificiali.

Dominio [0 - 255] per ogni canale

Tutti i vari parametri.

Page 11: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Linguaggio 3/3

Sparo(<Tipo><Param. posizione><Param.luce><Scia><Scoppio>)

• Param. di posizione

• Param. di luce

• Scia

• Ascissa punto innesco• Ordinata punto innesco• Altezza esplosione

• Numero luci• Durata luci• Dimensione sparo

• Energia

• Si / No

• Scoppio• Sfrigolante / Secco / Normale

• Tipo• StelleFilanti/Puntini/Girandole

• Dimensione luce

Page 12: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Grammatica & Linguaggio: considerazioni

• La grammatica è di tipo 2, ma il linguaggio generato è di tipo 3 (Classificazione di Chomsky), infatti:

Self-embedding assente il linguaggio è regolare

• La grammatica è LL(1).

• Nella grammatica è assente la stringa vuota ε; esiste una tecnica di riscrittura in grado di eliminare sempre la stringa vuota da tutte le produzioni tranne lo scopo (S ε, dove S non compare nella parte destra di alcuna produzione.)

Ciascuna produzione che presenta alternative nella sua parte destra ha insiemi di Starter Symbols disgiunti e la stringa vuota è assente condizione necessaria e sufficiente per affermare che la grammatica è LL(1).

Page 13: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Scelte progettuali• Il tempo : ogni sparo ha una sua durata; è possibile indicare dei ritardi rispetto allo sparo precedente. Ogni sparo possiede un tempo fisico di innesco, empiricamente pari a 2 secondi.

Batteria

Ritardo(3); Sparo(Girandole:120,300,350,3,1,2,80,300,Si,Sfrigolante); Ritardo(1); Sparo(StelleFilanti:80,340,500,1,2,2,60,300,No,Secco); Sparo(StelleFilanti:100,300,400,2,2,2,90,300,No,Secco);

Fine

0 2 4 6 10 sec.8

S1 S2 S3

Conseguenze: gli spari non vengono innescati contemporaneamente, mentre se la durata di Si > Si+1 è possibile la rappresentazione contemporanea di Si ed Si+1.

Page 14: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Scelte progettuali

• Due visitor: uno è indispensabile per riempire correttamente la tabella degli eventi, per settare le impostazioni generali della simulazione e per trasformare le grandezze in ingresso in grandezze nel dominio dei fuochi di artificio; l’altro disegna un albero su un pannello per mostrare la struttura dello spettacolo pirotecnico.

• Tabella degli eventi : ogni fuoco pirotecnico è considerato come un evento e viene inserito in una apposita HashTable; un evento contiene tutti i parametri relativi allo sparo da lanciare e l’istante di innesco “assoluto”.

• Motore grafico (Engine) come singleton : è la classe che si occupa di rappresentare graficamente la simulazione e ne scandisce il tempo. Comunica a stretto contatto con la Tabella degli eventi per reperire su bisogno quello più prossimo. E’ progettato con forte idea di riuso: la tabella consente di disaccoppiare il motore grafico ed i visitor. Realizzare un nuovo motore grafico e sostituirlo a quello esistente diventa molto semplice !

Page 15: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Stelle Filanti

48

Tabella eventi ed Engine

Stelle Filanti

Stelle Filanti

Girandole

Girandole

Puntini

Puntini

10

15

35

52

58

98

Tabella Eventi

getLastEvent()

Return evento

Parametri

Parametri

Parametri

Parametri

Parametri

ParametriParametri

Motore grafico

Fireworks Visitor

addEvent(Event evento)

Pannello Simulazione

Draw(evento)

Page 16: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

ArchitetturaAST

Fireworks Parser

Fireworks Visitor

Tree Visitor

Sorgente

Valutazione spettacolo

Albero

Page 17: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Architettura : packagesSuonoEsplosione.java

Eventi.java

TabellaEventi.java

LetturaFileTxt.java

TreePanel.java

MainPanel.java

Fuoco.java

Girandole.java

FireworksParser.java

Engine.java

TokenMngError.java

Token.java

Scia.java

Sfondo.java

Meteo.java

Sparo.java

DepthFirstVisitor.java

FireworksVisitor.java

TreeVisitor.java

……

… … …

Page 18: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Architettura: parser

• Classi generate automaticamente da javaCC a partire dalla grammatica.

Parser

Lexer

Page 19: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Architettura: visitor

Genera la visualizzazione dell’albero.

Genera lo spettacolo pirotecnico.

Automaticamente generato da JTB.

Page 20: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Diagramma delle classi (semplificato)

Page 21: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Test

• Test di utilizzo dell’applicazione finale da parte dell’utente finale. Inserimento di frasi corrette e di frasi non corrette e verifica della risposta del parser.

• Classi di test per verificare il funzionamento corretto dei componenti ritenuti più complessi, quindi quelli con più alta probabilità errore, omissione o bug.

1) Ritardo(-20); numeri negativi non ammessi

2) Sparo Girandole(…)); ( mancante

3) Impostazioni ”EOF” incontrato: mi aspettavo “Carica”

4) Colore(100-210-) ”NUM” mancante

n) …

Page 22: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Strumenti utilizzati

• Editor Java: Eclipse SDK 3.1.1

• Generazione grammatica: JavaCC 3.2

• Visitor ed albero: JTB 1.3.2

Consente la generazione di un parser per grammatiche context-free LL(k) a partire dalla grammatica.

Generazione automatica della documentazione della grammatica (jjDoc).

Visitor costruito automaticamente.

Classi dell’albero costruite automaticamente.

Le azioni semantiche sono mantenute all’interno dei visitor; se la grammatica è stabile occorre modificare solo i visitor stessi.

Page 23: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

Sviluppi futuri e migliorie

• Arricchimento grafico della simulazione:

Grafica 3D in sostituzione della 2D.

Aggiunta di ulteriori categorie di sparo.

Analisi collisione con oggetti presenti nello sfondo.

Gestione automatica dei punti di fuga e della prospettiva.

Gestione avanzata della luce: ombre, luci, riflessi.

• Funzionalità del software:

Rendering della simulazione.

Possibilità di salvare lo stream video.

Descrizione grafica e non solo testuale degli spettacoli.

... Tutto quello che può suggerire la mente.

Page 24: Progetto Fireworks Simulatore di spettacoli pirotecnici Linguaggi e Modelli Computazionali LS Francesco Ferri.

DEMO

S

R

AT

T !