Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoDesideria Tucci Modificato 10 anni fa
1
Progetto Fireworks Simulatore di spettacoli pirotecnici
“Linguaggi e Modelli Computazionali LS” Francesco Ferri
2
Obiettivi di progetto Realizzare un linguaggio in grado di descrivere uno spettacolo di fuochi artificiali. Strutturato. Espressivo. Di facile comprensione e utilizzo. Definire un interprete per il linguaggio definito. Generare una simulazione in grafica 2D in grado di riprodurre spettacoli pirotecnici il più fedelmente possibile. Luci e spari. Condizioni atmosferiche. Suoni.
3
ScreenShot Barra di scorrimento temporale Pannello principale
Stima durata simulazione Posizione Cursore Struttura ad albero della simulazione Pannello per la simulazione
4
Grammatica 1/4 SCOPO <Fireworks> = Impostazioni<Impostazioni>Fine{<Batteria>}<EOF> <Impostazioni> = <Sfondo>;<VelocitaSimulazione>;<Meteo>; <Batteria> = Batteria{<Istruzione>;}Fine <Istruzione> = <Sparo>|<Intervallo>|<Colore> STRUTTURA DEL LINGUAGGIO
5
Grammatica 2/4 VELOCITA SIMULAZIONE
<VelocitaSimulazione>=Velocita(<Velocita>) <Velocita>=Alta|Media|Bassa <Sfondo>=Carica(<Id>) <Meteo>=(Sereno|<NonSereno>) <NonSereno>=<Precipitazione>,<Num>,<Num> <Precipitazione>=Vento|Pioggia|Neve SFONDO CONDIZIONI ATMOSFERICHE
6
Grammatica 3/4 <Intervallo>=Ritardo(<Num>) ATTESA
<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
7
Grammatica 4/4 NUMERI POSITIVI
< Id: ( ["a"-"z"] (["a"-"z"]|["0"-"9"]|"."|"\\"|":\\")* ) > NUMERI POSITIVI IDENTIFICATORI
8
Struttura del linguaggio
Impostazioni [ Impostazioni generali ] 1 Fine Batteria [ Istruzioni ] 1..N Fine
9
Il linguaggio 1/3 Impostazioni Sfondo(Capodanno_a_Venezia.jpg);
E’ possibile impostare una immagine di sfondo. Velocita(Media); Si richiede di specificare una velocità di simulazione: Alta(10x), Media(5x) o Bassa(1x). Meteo(Pioggia,10,30); Indicazioni di condizioni atmosferiche: Sereno oppure Vento, Pioggia o Neve e indicazione di intensità e direzione. Fine Dominio [0+K* K*180] con K ≥ 0
10
Linguaggio 2/3 Batteria Ritardo(5); Colore(200-120-80)
Impostazione di un ritardo dall’ultima esplosione. Colore( ) Dominio [ ] per ogni canale Colore dello sparo. Sparo(<Tipo><Param. posizione><Param.luce><Scia><Scoppio>) Fuochi artificiali. Tutti i vari parametri. Fine
11
Linguaggio 3/3 Tipo StelleFilanti/Puntini/Girandole
Param. di posizione Ascissa punto innesco Ordinata punto innesco Altezza esplosione Param. di luce Numero luci Durata luci Dimensione sparo Dimensione luce Energia Scia Si / No Scoppio Sfrigolante / Secco / Normale Sparo(<Tipo><Param. posizione><Param.luce><Scia><Scoppio>)
12
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). 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). 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.)
13
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 S1 S2 S3 2 4 6 8 10 sec. Conseguenze: gli spari non vengono innescati contemporaneamente, mentre se la durata di Si > Si+1 è possibile la rappresentazione contemporanea di Si ed Si+1.
14
Scelte progettuali 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”. 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. 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 !
15
Tabella eventi ed Engine
Pannello Simulazione Fireworks Visitor addEvent(Event evento) Draw(evento) Tabella Eventi 10 Stelle Filanti Parametri getLastEvent() 15 Girandole Parametri 35 Girandole Parametri Return evento 48 Puntini Parametri 52 Stelle Filanti Parametri 58 Stelle Filanti Parametri Motore grafico 98 Puntini Parametri
16
Architettura AST Fireworks Parser Fireworks Visitor Tree Visitor
Sorgente Fireworks Visitor Valutazione spettacolo Tree Visitor Albero
17
Architettura : packages
FireworksParser.java SuonoEsplosione.java TreePanel.java TokenMngError.java TabellaEventi.java MainPanel.java Engine.java Eventi.java Fuoco.java LetturaFileTxt.java Token.java Girandole.java … … … Scia.java Sfondo.java DepthFirstVisitor.java Meteo.java TreeVisitor.java Sparo.java FireworksVisitor.java … …
18
Architettura: parser Classi generate automaticamente da javaCC a partire dalla grammatica. Lexer Parser
19
Architettura: visitor
Automaticamente generato da JTB. Genera la visualizzazione dell’albero. Genera lo spettacolo pirotecnico.
20
Diagramma delle classi (semplificato)
21
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. 1) Ritardo(-20); numeri negativi non ammessi 2) Sparo Girandole(…)); ( mancante 3) Impostazioni ”EOF” incontrato: mi aspettavo “Carica” 4) Colore( ) ”NUM” mancante n) … Classi di test per verificare il funzionamento corretto dei componenti ritenuti più complessi, quindi quelli con più alta probabilità errore, omissione o bug.
22
Strumenti utilizzati Editor Java: Eclipse SDK 3.1.1
Generazione grammatica: JavaCC 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 ed albero: JTB 1.3.2 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.
23
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.
24
DEMO A S T R T !
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.