Fondamenti di Informatica per Ingegneria Prof. Ing. Fabio Massacci (A-L)

Download Report

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