Last Updated:
Sketchup scripting: Numeri e operatori numerici
Sketchup scripting: Numeri e operatori numerici Massimiliano Pratelli

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.

OperatoreOperazioneInteriVirgola mobile
+Addizione4 + 5 = 94.0 + 5.0 = 9.0
-Sottrazione12 – 4 = 812.0 – 4.0 = 8.0
*Moltiplicazione7 * 3 = 217.0 * 3.0 = 21.0
/Divisione20 / 8 = 220.0 / 8.0 = 2.5
%Modulo20 % 8 = 420.0 % 8.8 = 4.0
**Esponente3 ** 2 = 93.0 ** 2.0 = 9.0
Tabella 1

È 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:

  1. Eseguire tutte le operazioni tra parentesi da sinistra a destra.
  2. Eseguire tutte le operazioni di esponente da sinistra a destra.
  3. Eseguire tutte le operazioni di moltiplicazione e divisione da sinistra a destra.
  4. 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.

operatoreFunzione/ScopoEsempio
cmConvert centimeters to inches2.54.cm = 1
degreesConvert degrees to radians180.degrees = 3.14159265358979
feetConvert feet to inches1.feet = 12.0
inchConvert inches to length 
kmConvert kilometers to inches1.km = 39370.0787401575
mConvert meters to inches1.m = 39.3700787401575
mileConvert miles to inches1.mile = 63360.0
mmConvert millimeters to inches1.mm = 0.0393700787401575
radiansConvert radians to degrees3.14159265358979.radians = 180
to_cmConvert inches to centimeters0.393700787401575.to_cm = 1
to_feetConvert inches to feet12.to_feet = 1.0
to_inchConvert length to inches 
to_kmConvert inches to kilometers39370.0787401575.to_km = 1
to_lConvert inches to length 
to_mConvert inches to meters39.3700787401575.to_m = 1
to_mileConvert inches to miles63360.to_mile = 1.0
to_mmConvert inches to millimeters0.0393700787401575.to_mm = 1
to_yardConvert inches to yards36.to_yard = 1.0
yardConvert yards to inches1.yard = 36.0
Tabella 2

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