Transcript Fondamenti di Informatica per Ingegneria Prof. Ing. Fabio Massacci (A-L)
Fondamenti di Informatica per Ingegneria
Prof. Ing. Fabio Massacci (A-L) Ing. Enrico Blanzieri (M-Z) Lezione 7 Dip. di Informatica e Telecomunicazioni Università di Trento Fabio Massacci Programmazione ad Oggetti 1
Rappresentare Oggetti in VRML
•
File VRML descrive un mondo
– Sistema di assi cartesiani X/Y/Z – Tutti gli oggetti sono costruiti nel sistema di assi cartesiani – Default: oggetti centrati nell’origine – Oggetti nella stessa locazione si sovrappongono parzialmente Fabio Massacci Programmazione ad Oggetti 2
Oggetti Geometrici - Trasformazioni
•
Rappres. base VRML
– Tutti gli oggetti sono costruiti nel sistema di assi cartesiani – Default: oggetti centrati nell’origine, alto verso l’asse Y, asse X a destra, faccia verso l’asse Z (uscente dallo schermo) •
Trasformazioni di Oggetti
– Traslazioni in qualsiasi punto XYZ – Rotazioni contemporanee su tre assi – Scalature anche Anamorfiche (differenti proporzioni su differenti assi Fabio Massacci Programmazione ad Oggetti 3
Trasformazioni di Coordinate
• Nodo di tipo Trasform crea nuovo sistema di coordinate XYZ – Traslato – Ruotato – Scalato • rispetto al sistema di coord. originario • Oggetti nel sistema XYZ Trasformato – sono traslati, ruotati e scalati solidarmente al nuovo sistema • Intuizione – costruisco oggetti nell’origine, li rimpicciolisco od ingrandisco, poi li ruoto, e li sposto nel posto appropriato Fabio Massacci Programmazione ad Oggetti 4
Trasformazioni di Coordinate (cont)
• Sintassi VRMLper la Trasformazione
Transform { translation . . .
rotation . . .
scale . . .
children [ . . . ] }
• translation, rotation, scale: ovvia operazione • children: tutti gli oggetti a cui applicare la trasformazione.
• Qualche operazione può essere omessa Fabio Massacci Programmazione ad Oggetti 5
Trasformazioni di Coordinate (cont)
• Tra le children sono ammesse ricorsivamente altre trasform • La combinazione ricorsiva di due operazioni non è uguale alla esecuzione contemporanea
Transform { translation . . .
children [ Shape { . . . } Shape { . . . } Transform { . . . } ] }
Fabio Massacci Programmazione ad Oggetti 6
Trasformazioni - Traslazioni
• Traslazioni lungo gli assi
Transform { #lungo asse translation X 2.0
children [ . . . ] } Y 0.0
Z -1.5
• Trasla tutti gli oggetti in children – verso destra lungo l’asse X di 2m – stessa altezza sull’asse Y – indietro di 1.5m lungo l’asse Z Fabio Massacci Programmazione ad Oggetti 7
Trasformazioni - Traslazioni (codice)
• Traslazioni lungo l’asse X di un cilindro
Transform { translation children [ 2.0
0.0
0.0
Shape { geometry Cylinder { height 2.0
radius 1.0
} } ] }
Fabio Massacci Programmazione ad Oggetti 8
Trasformazioni - Traslazioni (cont)
• Sistema di assi Iniziale • Assi traslati di 2.0 lungo asse X • Oggetto costruito su nuovi assi Fabio Massacci Programmazione ad Oggetti 9
Trasformazioni - Rotazioni
• Rotazioni intorno agli assi
Transform { #lungo asse translation X 0.0
children [ . . . ] Y 0.0
} Z 1.0
Radianti 0.52
• Ruota tutti gli oggetti in children – intorno all’asse Z di 0.52 radianti (30 gradi) • Angoli misurati in radianti – radians = degrees / 180.0 * 3.141
Fabio Massacci Programmazione ad Oggetti 10
Trasformazioni - Rotazioni (cont)
• Asse di rotazione definisce un polo intorno a cui ruotare gli oggetti – Analogo all’asse Nord/Sud della terra • Esempi di rotazione tipici di r radianti – asse X 1.0
– asse Y 0.0
– asse Z 0.0
0.0
1.0
0.0
0.0
0.0
1.0
r r r • Possibili ruotazioni miste (vari numeri non a 0) – Sconsigliata per novizi: gli essere umani hanno pessime intuizioni su cosa succede facendo ruotazioni contemporanee su assi diversi Fabio Massacci Programmazione ad Oggetti 11
Trasformazioni - Rotazioni (codice)
• Rotazioni intorno asse Z di un cilindro
Transform { translation children [ 0.0
0.0
1.0
Shape { geometry Cylinder { height 2.0
radius 1.0
} } ] 0.52
}
Fabio Massacci Programmazione ad Oggetti 12
Trasformazioni - Rotazioni (cont)
• Sistema di assi Iniziale • Assi ruotati di 30g intorno a Z • Oggetto costruito su nuovi assi Fabio Massacci Programmazione ad Oggetti 13
Trasformazioni - Rotazioni (cont)
• Rot. positive in senso antiorario, counterclockwise • Regola della mano destra – aprire la mano – distendere il pollice e puntarlo nella direzione positiva dell’asse – curvare le dita intorno all’asse (come per stringerlo in mano) – la curvatura corrisponde ad una rotazione positiva Fabio Massacci Programmazione ad Oggetti 14
Trasformazioni - Scalature
• Scalature lungo agli assi
Transform { #lungo asse scale X 1.0
children [ . . . ] } Y 0.5
Z 2.0
• Scala tutti gli oggetti in children – lascia inalterate le dimensioni lungo l’asse X – dimezza l’altezza (dim lungo l’asse Y) – raddoppia la profondità (dim lungo l’asse Z) • Scalatura Anamorfa (Isomorfa tutti num uguali) Fabio Massacci Programmazione ad Oggetti 15
Trasformazioni - Scalature (codice)
• Scalatura Isomorfa di 0.5m in ogni direzione
Transform { scale children 0.5
[ 0.5
0.5
Shape { geometry Cylinder { height 2.0
radius 1.0
} } ] }
Fabio Massacci Programmazione ad Oggetti 16
Trasformazioni - Scalature (cont)
• Sistema di assi Iniziale • Assi scalati di metà (0.5) in ogni dimensione • Oggetto costruito su nuovi assi Fabio Massacci Programmazione ad Oggetti 17
Trasformazioni - Operazioni Multiple
• Scalatura, rotazione e traslazione di un sistema di coordinate
Transform { translation rotation 2.0
0.0
scale 0.5
children [ . . . ] 0.0
0.0
0.5
0.0
1.0
0.5
0.52
}
• I figli sono scalati, ruotati e poi traslati • L’ordine è fissato, indipendentemente dall’ordine con cui appaiono Fabio Massacci Programmazione ad Oggetti 18
Trasformazioni - Multiple Operaz. (cont)
• Sistema di assi Iniziale • Oggetto scalato della metà • ruotato di 30g • spostato di 2m lungo l’asse X Fabio Massacci Programmazione ad Oggetti 19
Trasformazioni - Multiple (cont)
• Attenzione combinazione di trasformazioni – aspetti subdoli: rotation+ traslation, scale+traslation • Scale+Traslation insieme
Palazzo10mVerde {...} Transform { translation 20.0 0.0
0.0
scale 0.5
0.5
0.5
children [ Palazzo10mRosso {...} ] }
• Risultato è un palazzo di 10m verde con affianco, a 20m di distanza un palazzo di 5m rosso Fabio Massacci Programmazione ad Oggetti 20
Trasformazioni - Multiple (cont)
Palazzo10mVerde {...} Transform { scale children [ 0.5
0.5
0.5
Transform { translation 20.0 0.0
0.0
children [ Palazzo10mRosso {...} ] } ] }
• Risultato è un palazzo di 10m verde con affianco, a 10m di distanza (notare scalatura) un palazzo di 5m rosso Fabio Massacci Programmazione ad Oggetti 21
Trasformazioni - Multiple (cont)
• Traslazioni e rotazioni abbastanza imprevedibili • Facile: rotazione e poi traslazione
Palazzo10mVerde {...} Transform { traslation rotation 20.0 0.0
0.0
1.0
0.0
0.0
1.57
children [ Palazzo10mRosso {...} ] }
• Risultato è un palazzo di 10m verde con affianco, a 20m di distanza un palazzo di 10m rosso ruotato di 90gradi su se stesso a destra Fabio Massacci Programmazione ad Oggetti 22
Trasformazioni - Multiple (cont)
Palazzo10mVerde {...} Transform { rotation children [ 0.0
0.1
0.0
1.57
Transform { translation 20.0 0.0
0.0
children [ Palazzo10mRosso {...} ] } ] }
• Risultato è un palazzo di 10m verde con ... dove è finito il palazzo rosso?
Fabio Massacci Programmazione ad Oggetti 23