La
matematica nel progetto
Espressioni pianale
Posizione pianale (pivot pianale centrato sul
carrello 1):
Posizione X — ETR:Carrello1.pos(Time).x {viene letta la coordinata X del carrello 1 e utilizzata
per
impostare la coordinata X del pianale}
Posizione Y — ETR:Carrello1.pos(Time).y {viene
letta la coordinata Y del carrello 1 e utilizzata
per
impostare la coordinata Y del pianale}
Posizione Z — ETR:Carrello1.pos(Time).z {viene
letta la coordinata Z del carrello 1 e utilizzata
per
impostare la coordinata Z del pianale}
Espressioni calcolo rotazioni pianale: Angolo
H
Angolo H = deg(atan(A/B))*(ETR:Carrello1.pos(Time).z >=
ETR:Carrello2.pos(Time).z)+ (180+deg(atan(A/B)))*(ETR:Carrello1.pos(Time).z <ETR:Carrello2.pos(Time).z)
Variabile A (segmento A di figg. 1, 2) = ETR:Carrello1.pos(Time).x – ETR:Carrello2.pos(Time).x
Variabile B (segmento B di figg. 1, 2) = ETR:Carrello1.pos(Time).z – ETR:Carrello2.pos(Time).z
Useremo la
funzione goniometrica tangente, congiuntamente
con la funzione arcotangente, per calcolare l'angolo
da assegnare all'oggetto “Pianale”.
La prima cosa da fare è determinare i valori
dei segmenti che entrano in gioco nel calcolo della
tangente: A (identificato dalla variabile A nelle
espressioni) e B (identificato dalla variabile
B nelle espressioni). Il segmento A è la
differenza delle coordinate X dell'oggetto “ETR500:Carrello1” e
dell'oggetto “ETR500:Carrello2”, questa operazione è svolta
nel campo di input “A” della finestra
di dialogo Channel Expression (vedi Figura
3)
 |
Figura 3
- Channel Expression |
Come è facile
intuire, il segmento B è la differenza delle
coordinate Z degli oggetti utilizzati per determinare
il segmento A (vedi Figura
4).
 |
Figura 4
- Channel Expression |
Per calcolare l'arcotangente si ricorre alla funzione
atan(argomento), dove argomento è il
rapporto (il rapporto è la tangente dell'angolo
cercato) ovvero, nel linguaggio delle espressioni
di LightWave,
atan(A/B). Occorre
ricordare che LightWave effettua tutti i calcoli
che coinvolgono le funzioni goniometriche
(seno, coseno, tangente, arcotangente, ecc...) in
radianti, occorre dunque eseguire una conversione
in gradi sessadecimali del valore ottenuto dall'operazione
atan(A/B) mediante la funzione deg (argomento), dove
argomento è il valore dell'angolo
espresso in radianti. Per completezza di informazione
riportiamo
anche l'esistenza della funzione rad(argomento) che
converte in radianti il valore di argomento.
Qualche semplice esempio per meglio chiarire le
due funzioni:
deg(3,14) — viene convertito in 180° sessadecimali
rad(180) — viene convertito in 3,14rad (rad indica
i gradi espressi in radianti)
deg(1,57) — viene convertito in 90° sessadecimali
rad(90) — viene convertito in 1,57rad
L'espressione che calcola la rotazione H del pianale
si compone di due parti
La prima parte, indicata
con EXPR1 (vedi
figura
5), risolve il caso raffigurato dalla figura 1; la
seconda parte, indicata con EXPR2 (vedi
figura 5), risolve
il caso raffigurato dalla figura 2.
 |
Figura
5 - Channel Expression |
EXPR1 = deg(atan(A/B))*(ETR:Carrello1.pos(Time).z >=
ETR:Carrello2.pos(Time).z) (figura
1)
EXPR2 = (180+deg(atan(A/B)))*(ETR:Carrello1.pos(Time).z <ETR:Carrello2.pos(Time).z) (figura
2)
Come è facile notare dalla figura 5, l'espressione
completa valutata da LightWave è EXPR1 +
EXPR2 ma questo non significa che sia EXPR1 che
EXPR2 concorrano a determinare il valore della
rotazione H del pianale: le due situazioni non
possono verificarsi contemporaneamente.
Vediamo come LightWave valuta l'espressione per
determinare l'angolo H del pianale.
L'ordine con cui deve essere risolta una qualunque
espressione, sia essa algebrica o aritmetica, è determinato
da poche semplici regole:
- 1. Vanno risolte prima le operazioni indicate
nelle parentesi più interne (parentesi tonde),
poi si passa a valutare il contenuto delle parentesi
quadre (se presenti) e, infine, quello delle parentesi
graffe (se presenti). LightWave utilizza nella
sintassi delle espressioni solamente le parentesi
tonde che fanno le veci di tutte le tipologie di
parentesi menzionate in precedenza.
La figura qui sopra permette di capire come devono essere intese le parentesi all'interno di una
espressione di LightWave.
- 2. L'ordine con cui vanno eseguite le operazioni è il seguente:
- - elevamento a potenza
- - moltiplicazioni e divisioni nell'ordine in cui sono scritte
- - addizione e sottrazione nell'ordine in cui sono scritte
Analizziamo il codice delle sottoespressioni che
compongo l'espressione generale.
EXPR1 = deg(atan(A/B))*(ETR:Carrello1.pos(Time).z >=
ETR:Carrello2.pos(Time).z) (figura
1)
La prima parte dell'espressione di EXPR1, deg(atan(A/B)),
calcola l'angolo a1 nell'ipotesi che il movimento
del pianale
avvenga come illustrato in figura
1.
Per avere la certezza che sia effettivamente così,
nella seconda parte di EXPR1, ETR:Carrello1.pos(Time).z >=
ETR:Carrello2.pos(Time).z, si effettua una
verifica booleana sulla posizione dei carrelli, in
italiano:
SE la coordinata Z del Carrello1 È MAGGIORE
O UGUALE alla coordinata Z del Carrello2 ALLORA
la verifica condizione (MAGGIORE O UGUALE ? >=) è VERIFICATA
(ci troviamo nel caso di figura
1)
e LightWave restituisce il valore 1 (CONDIZIONE VERA),
se la condizione NON è verificata otterremo
un valore di 0 (CONDIZIONE FALSA).
EXPR2 = (180+deg(atan(A/B)))*(ETR:Carrello1.pos(Time).z <ETR:Carrello2.pos(Time).z) (figura
2)
La prima parte dell'espressione EXPR2 (180+deg(atan(A/B))) calcola
l'angolo a1 nell'ipotesi che il movimento del pianale
avvenga come illustrato in “Figura 2”.
Osservando la “Figura 2” vi “suona
strano” sommare a 180° l'angolo a1? L'angolo
a1 che andiamo a calcolare è negativo perché lo è il
segmento B: la coordinata Z del Carrello1 e minore
della corrispettiva del Carrello2, quindi l'espressione
deve intendersi come 180+(-a1) ossia 180 – a1
(somma algebrica). Anche in questo caso, per essere
certi di trovarci nel caso di “Figura 2”,
ricorriamo a una verifica booleana sulla posizione
dei carrelli nella seconda parte di EXPR2:
Se la coordinata Z del Carrello1 È MINORE
della coordinata Z del Carrello2 ALLORA la verifica
condizione (MINORE ? <) è VERIFICATA (ci
troviamo nel caso di figura
2) e LightWave
restituisce il valore 1 (CONDIZIONE VERA), se la
condizione NON è verificata otterremo il valore
0 (CONDIZIONE FALSA).
Vediamo come quanto illustrato qui sopra viene concretamente
applicato da LightWave.
In prima istanza Lightwave non è in grado
di capire se il vagone si trova nel caso di figura
1 o di figura
2. Detto questo,
cosa accade dal punto di vista del programma? Secondo
le nostre istruzione esso calcola i segmenti necessari
per calcolare la tangente dell'angolo da utilizzare
come argomento per la funzione arcotangente poi,
nell'ordine, calcola EXPR1 e poi EXPR2.
Ipotizziamo che il rotabile si trovi nel caso raffigurato
da figura
1 e vediamo che accade dal
punto di vista di Lightwave.
 |
| Figura 1 |
1. Lightwave calcola il valore da attribuire alla
variabile A ovvero esegue la differenza delle coordinate
X degli oggetti Carrello1 e Carrllo2 (segmento A);
2. Ora il programma calcola il valore da assegnare
alla variabile B ovvero la differenza delle coordinate
Z degli oggetti Carrello1 e Carrello2 (segmento B);
3. Eseguiti i punti “1” e “2” Lightwave
inizia a valutare l'espressione nel seguente modo:
- - esegue il calcolo di a1 = deg(atan(A/B))
- verifica la condizione (ETR:Carrello1.pos(Time).z >=
ETR:Carrello2.pos(Time).z) che sarà VERA
(quindi, numericamente parlando, vale “1”)
perché la
coordinata Z del Carrello1 è maggiore della
corrispettiva di Carrello2 e questo ci assicura
che siamo del caso di figura
1 - fino a ora l'espressione “vale” a1*1
+ EXPR2
4. Ora LightWave inizia a esaminare EXPR2;
- - esegue il calcolo di a1 = (180+deg(atan(A/B)))
- verifica la condizione (ETR:Carrello1.pos(Time).z<ETR:Carrello2.pos(Time).z) che
risulterà FALSA (quindi, numericamente
parlando, vale “0”) perché la
coordinata Z del Carrello1 è maggiore della
corrispettiva di Carrello2 e questo avvalora ulteriormente
il fatto che ci troviamo nel caso di figura
1
- ora EXPR2 “vale” (180+a1)*0
5. L'espressione calcolata da LightWave è dunque
a1*1 + (180+a1)*0, risulta evidente che il secondo
addendo è nullo e che l'angolo attribuito
al rotabile è quello calcolato da EXPR1.
Ipotizziamo ora che
il rotabile si trovi nel caso raffigurato da figura
2 e vediamo cosa accade eseguendo passo passo
l'espressione.
 |
Figura 2 |
1. LightWave calcola il valore da attribuire alla
variabile A ovvero esegue la differenza delle coordinate
X degli oggetti Carrello1 e Carrllo2 (segmento A);
2. Ora il programma calcola il valore da assegnare
alla variabile B ovvero la differenza delle coordinate
Z degli oggetti Carrello1 e Carrello2 (segmento B);
3. Eseguiti i punti “1” e “2” Lightwave
inizia a valutare l'espressione nel seguente modo:
- - esegue il calcolo di a1 = deg(atan(A/B))
- verifica la condizione (ETR:Carrello1.pos(Time).z >=
ETR:Carrello2.pos(Time).z) che
sarà FALSA
(quindi, numericamente parlando, vale “0”)
perché la coordinata Z del Carrello1 è minore
della corrispettiva di Carrello2 e questo ci assicura
che siamo del caso di “Figura 2”
- fino a ora l'espressione “vale” a1*0
+ EXPR2
4. Ora Lightwave inizia a esaminare EXPR2;
- - esegue il calcolo di a1 = (180+deg(atan(A/B)))
- verifica la condizione (ETR:Carrello1.pos(Time).z<ETR:Carrello2.pos(Time).z) che
risulterà VERA (quindi, numericamente
parlando, vale “1”) perché la
coordinata Z del Carrello1 è minore della
corrispettiva di Carrello2 e questo avvalora ulteriormente
il fatto che ci troviamo nel caso di “Figura
2”
- ora EXPR2 “vale” 180
+ (-a1)*1. NOTA: l'angolo a1 è negativo perché lo è il
segmento B e di conseguenza il rapporto : B è negativo
perché la coordinata Z del Carrello1 è minore
della corrispettiva di Carrello2.
5. L'espressione calcolata da Lightwave è dunque
a1*0 + (180-a1)*1, risulta evidente che il primo
addendo è nullo e che l'angolo attribuito
al rotabile è quello calcolato da EXPR2.
Giunti a questo
punto dovreste essere in grado di applicare la procedura
sopra descritta ai due casi raffigurati in Figura
6, Figura 7 e determinare quale
parte dell'espressione (EXPR1 o EXPR2) determina
l'angolo da assegnare al vagone.
 |
 |
Figura 6 |
Figura 7 |
Soluzione “Moto di Figura 6”
Il moto descritto da Figura
6 è riconducibile
al caso di Figura
2 e verrà utilizzata
EXPR2 per calcolare
l'angolo da attribuire al rotabile che varrà 180
+ a1. Notare che a1 (circa 58°,
valutazione grafica) è positivo per la regola
dei segni essendo entrambi i segmenti negativi.
Soluzione “Moto di Figura 7”
Il moto descritto da Figura
7 è riconducibile
al caso di Figura
1 e verrà utilizzata
EXPR1 per calcolare
l'angolo da attribuire al rotabile che varrà -a1.
L'angolo a1 (circa 60°,
valutazione grafica) è negativo perché lo è il
segmento A: la coordinata di ETR500:Carrello1 è minore
di ETR500:Carrello2 e quindi la differenza tra ETR500:Carrello1 – ETR500:Carrello2
dà un numero negativo.
Ecco il risultato applicato agli oggetti
 |
Espressioni applicate al pianale |
« La
matematica nel progetto »
Commenti »
|