
Sketchup scripting: Numeri e operatori numerici
Entriamo nel vivo di Ruby per Sketchup, leggendo il libro di Mattew Scarpino a cui si fa riferimento, ossia Automatic Sketchup – Creating 3D model in Sketchup. Iniziamo lo studio del linguaggio di scripting di Sketchup dalla struttura dei dati, in questo caso vediamo i numeri e gli operatori numerici.
Table of Contents
Quando si creano modelli SketchUp in Ruby, una delle attività più comuni prevede la definizione di punti che delimitano linee e superfici. Ogni punto è composto da tre coordinate numeriche, quindi è fondamentale capire come Ruby gestisce la parte numerica.
Questo post illustra i formati numerici, gli operatori e l’ordine delle operazioni.
Da leggere: Introduzione a Ruby per Sketchup
Da sapere: Le convenzioni in Ruby
Numeri interi e in virgola mobile
In questo post, ci occuperemo di due tipi di numeri: numeri interi e valori in virgola mobile. Un numero intero appartiene all’insieme dei numeri naturali, un numero intero non ha un punto decimale.
Il segno "+" che precede il numero indica un valore positivo e un "-" indica un valore negativo. Se non viene fornito alcun segno, si assume che il valore sia positivo.
Proprio come i numeri grandi sono normalmente suddivisi con opportuni divisori, Ruby ti consente di separare numeri grandi con caratteri di sottolineatura (underscore). Ad esempio, il numero 1.000.000 può essere espresso come 1000000 o 1_000_000.
Per verificare ciò, fai una prova, apri la console – menu finestra - immetti quanto segue nella riga di comando:
5_000 / 4
Il risultato è 1250, proprio come se avessi inserito 5000/4.
Il termine numero in virgola mobile, indica il metodo di rappresentazione approssimata dei numeri reali e di elaborazione dei dati usati dai processori per compiere operazioni matematiche
I numeri a virgola mobile hanno i decimali, divisi dall’apposito separatore. Il separatore decimale divide la parte decimale da quella intera.
In Ruby, ogni numero in virgola mobile deve contenere almeno una cifra prima e dopo il punto decimale. Cioè, puoi esprimere 1/2 come “0.5” o “0.500”, ma mai come “.5”.
Un valore in virgola mobile può essere preceduto da + o - e può essere seguito da “e” per definire un esponente. Sono validi i seguenti numeri in virgola mobile: -25.4, 1.4959e11, 123_456.789_012 e 3.14159.
Ruby fornisce altri tipi numerici, inclusi numeri complessi e numeri razionali. Ma ai fini del nostro utilizzo, cioè creare script funzionali al nostro lavoro, avrai solo bisogno di numeri interi e valori in virgola mobile.
Operatori aritmetici
Ruby riconosce tutti gli operatori aritmetici comuni utilizzati in C e in altri linguaggi di programmazione: +, -, * e /. Questi sono elencati nella tabella 1 seguente insieme agli operatori modulo ed esponente.
Operatore | Operazione | Interi | Virgola mobile |
+ | Addizione | 4 + 5 = 9 | 4.0 + 5.0 = 9.0 |
- | Sottrazione | 12 – 4 = 8 | 12.0 – 4.0 = 8.0 |
* | Moltiplicazione | 7 * 3 = 21 | 7.0 * 3.0 = 21.0 |
/ | Divisione | 20 / 8 = 2 | 20.0 / 8.0 = 2.5 |
% | Modulo | 20 % 8 = 4 | 20.0 % 8.8 = 4.0 |
** | Esponente | 3 ** 2 = 9 | 3.0 ** 2.0 = 9.0 |
È importante vedere come il tipo di risultato (intero o in virgola mobile) è determinato dagli input numerici, ovvero dagli operandi. Se un intero viene sottratto da un altro, il risultato sarà sempre un numero intero e lo stesso vale per addizione, sottrazione e divisione.
Se un operando è un numero intero e l'altro è un valore in virgola mobile, il risultato sarà sempre un valore in virgola mobile. Questo è dimostrato nei seguenti esempi:
90 - 82 restituisce 8
90.0 - 82 restituisce 8.0
3 * 4 restituisce 12
3 * 4.0 restituisce 12.0
4/3 restituisce 1
4 / 3.0 restituisce 1.33333333333333
3/4 restituisce 0
3 / 4.0 restituisce 0,75
Le ultime quattro di queste espressioni fanno uso dell’operatore di divisione e all’inizio i risultati potrebbero non essere ovvi. Se uno degli operandi è in virgola mobile, il risultato è il normale quoziente in virgola mobile. Ma se entrambi gli operandi sono numeri interi, come per le divisioni viste nell’esempio, il resto viene scartato e viene restituito solo il risultato intero.
Per ottenere il resto della divisione intera, è necessario il quinto operatore nella tabella: l’operatore modulo o “%”. Il modo migliore per capirlo è l'esempio.
Se 17 è diviso per 5, il risultato è 3 con un resto di 2. In Ruby, questo significa 17/5 = 3 e 17 % 5 = 2. Se a si divide uniformemente in b, il risultato di b % a sarà sempre zero.
Pertanto, le seguenti espressioni dovrebbero avere senso:
- 16/8 restituisce 2
- 16 / 8.0 restituisce 2.0
- 16 % 8 restituisce 0
L’ultimo operatore nella tabella, **, esegue l’elevamento a potenza, e a ** b è la stessa operazione di a^b. Il secondo operando è l'esponente e definisce quante volte il primo operando deve essere moltiplicato per se stesso. Ad esempio, 2 ** 3 restituisce 8 perché 2^3 è uguale a 8.
L’esponente non deve essere un numero intero e puoi calcolare le radici quadrate impostandolo uguale a 1/2 e le radici del cubo impostando l’esponente su 1/3. Allo stesso modo, se l'esponente è negativo, il risultato è l'inverso moltiplicativo (1 / x) dell'operazione con un esponente positivo. Ad esempio, 2.0 ** -3 = 1 / (2.0 ** 3) = 1/8.
I seguenti esempi mostrano ulteriori usi dell'operatore **:
- 4 ** 2 restituisce 16
- 4 ** -2 restituisce 0.0625
- 4 ** 0.5 restituisce 2.0
- 4 ** 0 restituisce 1
- 4 ** (1/2) restituisce 1 (l’esponente restituisce 0)
Operare su valori numerici è un’attività cruciale in molti progetti di SketchUp. Mentre scrivi il codice, tieni presente che le operazioni con numeri interi generalmente restituiscono solo numeri interi.
Per ottenere un risultato in virgola mobile, uno degli operandi deve essere in virgola mobile.
Ordine delle operazioni
Se un comando Ruby contiene più operatori numerici, le operazioni non sono necessariamente eseguite da sinistra a destra.
Le seguenti regole devono essere applicate in ordine:
- Eseguire tutte le operazioni tra parentesi da sinistra a destra.
- Eseguire tutte le operazioni di esponente da sinistra a destra.
- Eseguire tutte le operazioni di moltiplicazione e divisione da sinistra a destra.
- Eseguire tutte le operazioni di addizione e sottrazione da sinistra a destra.
Ad esempio, guarda il seguente comando:
1 + 3 * (6 - 4) ** 3 / (1 + 3)
Ruby calcolerà prima le operazioni tra parentesi: (6 - 4 = 2) e (1 + 3 = 4). Successivamente, eseguirà l’elevamento a potenza (2^3 = 8) e l'equazione diventa:
1 + 3 * 8/4
Infine, Ruby esegue la moltiplicazione (3 * 8 = 24) e la divisione (24/4 = 6). La risposta finale viene calcolata come 1 + 6 = 7.
Conversioni numeriche in Sketchup
Prima di abbandonare l’argomento dei numeri, è importante menzionare gli operatori forniti da SketchUp oltre a quelli descritti in precedenza. Questi sono elencati nella tabella 2 che segue.
operatore | Funzione/Scopo | Esempio |
cm | Convert centimeters to inches | 2.54.cm = 1 |
degrees | Convert degrees to radians | 180.degrees = 3.14159265358979 |
feet | Convert feet to inches | 1.feet = 12.0 |
inch | Convert inches to length | |
km | Convert kilometers to inches | 1.km = 39370.0787401575 |
m | Convert meters to inches | 1.m = 39.3700787401575 |
mile | Convert miles to inches | 1.mile = 63360.0 |
mm | Convert millimeters to inches | 1.mm = 0.0393700787401575 |
radians | Convert radians to degrees | 3.14159265358979.radians = 180 |
to_cm | Convert inches to centimeters | 0.393700787401575.to_cm = 1 |
to_feet | Convert inches to feet | 12.to_feet = 1.0 |
to_inch | Convert length to inches | |
to_km | Convert inches to kilometers | 39370.0787401575.to_km = 1 |
to_l | Convert inches to length | |
to_m | Convert inches to meters | 39.3700787401575.to_m = 1 |
to_mile | Convert inches to miles | 63360.to_mile = 1.0 |
to_mm | Convert inches to millimeters | 0.0393700787401575.to_mm = 1 |
to_yard | Convert inches to yards | 36.to_yard = 1.0 |
yard | Convert yards to inches | 1.yard = 36.0 |
Internamente, SketchUp memorizza i valori di lunghezza in pollici, anche se si sceglie un modello basato sul sistema metrico.
Per questo motivo, la maggior parte delle utilità di conversione nella Tabella 2 converte da pollici o converte in pollici. Questi operatori sono diversi da quelli della Tabella 1 in quanto sono accessibili posizionando un punto (.) dopo il numero.
La terza colonna mostra come questi operatori vengono utilizzati nella pratica.
Ad esempio, il seguente comando converte una lunghezza di 72 pollici in metri:
72.to_m
Il risultato è 1.8288 perché 1.8288 metri ha la stessa lunghezza di 72 pollici.
Tutte le routine di SketchUp che si occupano di angoli richiedono valori angolari da fornire in radianti, non in gradi. Ma poiché è più semplice gestire i numeri interi, conviene iniziare con i gradi e convertire l'angolo in radianti.
Ad esempio, per convertire 30° in radianti, utilizzare il comando seguente:
30.degrees
Ciò può causare confusione poiché stiamo convertendo da gradi anziché a gradi. Tuttavia, le misure angolari verranno utilizzate frequentemente e, alla fine, l’uso dell'operatore gradi diventerà naturale.
Hai provato a testare i numeri e gli operatori in Sketchup?
Fammi sapere se hai già testato un po' di codice all'interno di SketchUp. Hai seguito un percorso diverso per l'apprendimento?
Personalmente credo che la guidadi Ruby su html.it si fatto bene; ottimo da seguire come infarinatura iniziale, e non solo.
Scrivilo nei commenti, fammi sapere se hai risorse da condividere.
Per approfondire puoi leggere anche: Tipi di dati: numeri
Comments