Author Archives: admin

Colori

Gli oggetti 3D hanno 2 proprietà con le quali si possono impostare il colore e l’opacità/trasparenza.


color


Nel sistema di colore RGB un colore si specifica come terna RGB (red, green, blue) con la quale si specifica quanto sono accesi i punti colorati corrispondenti dello schermo.

Il colore bianco corrisponde alla massima intensità per i tre colori fondamentali (1, 1, 1) mentre il nero corrisponde a tutto spento (0, 0, 0).
Il colore rosso più acceso si ottiene con (1, 0, 0), che significa tutto rosso e niente verde e blu.

Ecco alcuni esempi di triple RGB con il nome corrispondente

vector(0, 0, 0) color.black
vector(0, 0, 1) color.blue
vector(0, 1, 1) color.cyan
vector(0, 1, 0) color.green
vector(1, 0, 1) color.magenta
vector(1, 0.5, 0) color.orange
vector(0.4, 0.2, 0.6) color.purple
vector(1, 0, 0) color.red
vector(1, 1, 1) color.white
vector(1, 1, 0) color.yellow

Per creare qualsiasi sfumatura di colore si possono scegliere 3 valori a piacere per i 3 colori

  • vector(1, 0.7, 0.2), a coppery color

Le sfumature di grigio hanno una definizione specifica con un valore da 0.0 a 1.0

  • vector(0, 0, 0), color.gray(0.0), nero
  • vector(0.5, 0.5, 0.5), color.gray(0.5), grigio scuro
  • vector(1, 1, 1), color.gray(1.0), bianco

Il sistema di colore HSV non è disponibile ma ci sono 2 funzioni per passare dal sistema RGB a HSV (hue, saturation, brightness) e viceversa

  • c2=color.rgb_to_hsv(c1)
  • c1=color.hsv_to_rgb(c2)

Esempi


Il programma dimostrativo https://www.glowscript.org/#/user/GlowScriptDemos/folder/Examples/program/Color-RGB-HSV-VPython permette di agire su dei cursori per i valori di R, G, B, H, S e ottenere il colore desiderato e il codice corrispondente da copiare.


opacity


Gli oggetti diventano più o meno trasparenti specificando un valore da 0 a 1 per l’attributo opacity.

Per esempio

è un cubo rosso leggermente trasparente.

Il valore 0 assegnato all’attributo opacity significa oggetto totalmente trasparente mentre 1 significa totalmente opaco.

Problemi

  • Gli oggetti curve, convex, faces, points e helix non accettano il parametro opacity.
  • La scena con oggetti trasparenti potrebbe presentare degli errori…

Bounce

Tutorial ufficiale


Una pallina bianca

Una pallina azzura e una parete verde a destra

 

La posizione della palla dipende dal tempo: ball.pos=ball.pos+ball.velocity*deltat

Il tempo scorre per alcuni secondi: t=t+deltat

Se la posizione della palla supera quella del muro a destra allora si inverte il segno della velocità

La palla rimbalza sul lato destro ma si perde sul lato sinistro…
Un’altra parete e un’altra condizione per rimbalzare

La palla annega parzialmente nelle pareti, è necessario migliorare il controllo

Un vettore di colore giallo segue la palla e indica direzione e verso del movimento

Per seguire la traiettoria della palla aggiungi automaticamente una traccia grafica: make_trail=True

La traiettoria completamente orizzontale è prevedibile, aggiungi

  1. il movimento in verticale
  2. le pareti in alto e in basso
  3. i controlli corrispondenti

La palla si muove su un piano xy piuttosto che nello spazio 3d, aggiungi

  • il movimento in profondità
  • una parete di fondo
  • la parete frontale è solo immaginata…
  • i controlli corrispondenti


L’animazione può continuare all’infinito modificando la condizione del ciclo

Si può aggiungere una seconda palla con colore e vettore velocità diversi


Ancora…


  1. Più palline
  2. Posizione iniziale, velocità, colore a piacere
  3. Colori delle palline, o delle pareti, che cambiano quando c’è un rimbalzo
  4. Pareti mobili…

Per evitare che la finestra si adatti a ogni intervento dell’utente escludi autoscale prima del ciclo while

 

Simply 3D Programming Using VPython – II

Questo documento fa parte del sito glowscript.org


VPython Entities


Oggetti, nomi, attributi

Gli oggetti grafici che crei, come cubi, sfere, curve, …, continuano ad esistere per tutta la durata del programma e il modulo vpython continuerà a visualizzarli dovunque si trovino.
Devi dare un nome a ciascun oggetto (come sopra: redbox, ball) se vuoi fare riferimento ad esso nelle righe successive del programma.
Tutti gli oggetti hanno degli attributi: ball.pos, ball.color, ball.radius, …
Se aggiorni il valore di un attributo di un oggetto, come per esempio la sua posizione o il suo colore, vpython automaticamente visualizzerà l’oggetto alla nuova posizione oppure con il nuovo colore.
I valori degli attributi si possono impostare nel costruttore (il codice utilizzato per creare l’oggetto) e si possono modificare successivamente

In aggiunta agli attributi già presenti è possibile crearne di nuovi (sia immediatamente che successivamente).
Per esempio si può creare una sfera di nome moon e in aggiunta al suo raggio e alla sua posizione darle nuovi attribuiti come moon.mass e moon.momentum.


Vettori

Non tutti gli oggetti sono visibili. Per esempio, vpython permette di creare vettori 3d e di eseguire operazioni su di essi.
Se crei un vettore di nome a puoi fare riferimento alle componenti come a.x, a.y e a.z.

Per sommare due vettori, a e b, non è necessario sommare le componenti una per una: vpython fa la somma al nostro posto

Se aggiungi l’istruzione print(c), vedrai che il risultato è il vettore con componenti (5, 7, 9).

Prodotto scalare

Magnitudine

Prodotto vettoriale

Gli attributi degli oggetti di vpython possono essere vettori, come velocità, …

Simply 3D Programming Using VPython – I

Questo documento fa parte del sito glowscript.org


Getting started


Per scrivere un programma nel browser registrati su glowscript.org, poi clicca il collegamento

Poi clicca Create New Program. Si aprirà una pagina vuota con la linea di intestazione del tipo

Inizia a scrivere il tuo codice dalla 2° linea in poi. Clicca Run this program per mettere alla prova il tuo programma.


Per scrivere un programma nell’IDLE di Python è sufficiente che inserisci la prima riga di codice seguente


Canvas

Gli oggetti 3D di vpython vengono visualizzati all’interno di una finestra grafica, canvas, immersa in una pagina web

  1. (0,0,0) è il centro della finestra
  2. L’asse x positivo cresce verso destra
  3. L’asse y positivo cresce verso l’alto
  4. L’asse z punta verso lo schermo, verso di te…
  5. L’unità di misura dei 3 assi è libera
    La finestra viene automaticamente scalata: puoi, per esempio, creare una sfera con raggio 1E-15 per rappresentare un nucleo e contemporaneamente una sfera di raggio 1E6 per rappresentare un pianeta, sebbene non avrebbe senso inserirli nella stessa finestra…

La finestra di output

Il risultato di un’istruzione print del programma risulterà in una finestra di testo con cursore immediatamente sotto la finestra grafica.
Questa finestra è utile per visualizzare i valori delle variabili (liste, messaggi, …)


Se utilizzi IDLE appariranno nella finestra di shell.


La finestra del codice

Se scrivi (fai copia e incolla) il codice seguente nella finestra dell’editor e poi lo esegui osserverai una finestra grafica come quella nella figura


Visualizzare la scena

Nella finestra grafica clicca con il tasto destro del mouse e trascina (oppure premi il tasto Ctrl mentre trascini): ruoterai la scena verso sinistra / destra o verso l’alto / basso.
Clicca con il tasto centrale e trascina per avvicinarti o allontanarti dalla scena (oppure premi i 2 pulsanti contemporaneamente, oppure premi contemporaneamente il tasto Alt.

Array

np.arange(), (array range) simile a range()

  • il passo, step, può essere decimale
  • con il parametro dtype si specifica il tipo di dato
  • restituisce un ndarray

np.linspace(), (linear space) simile a range()

  • linspace(start=…, stop=…), la sequenza da start a stop con 50 valori
  • linspace(start=…, stop=…, num=…), con specificato il numero di valori
  • linspace(start=…, stop=…, num=…, endpoint=False), escluso il valore stop

np.ndarray, array multidimensionale



  • np.max(): calcola il massimo nel vettore o matrice
  • np.mean(): calcola la media di un vettore o matrice
  • np.min(): calcola il minimo nel vettore o matrice
  • np.shape: restituisce una tupla con la “forma” (dimensioni) del vettore o matrice
  • np.size: restituisce la dimensione totale del vettore (=ndim) o della matrice
  • np.std(): calcola la deviazione standard
  • np.sum(): calcola la somma di un vettore o matrice
  • np.ndim: la dimensione del vettore o matrice
  • np.zeros(n): genera un vettore di n elementi inizializzati a zero
  • np.zeros((n1, n2, …, nn)): genera una matrice di dimensione n1 x n2 x … x nn
  • itemsize: scrive il numero di byte di ogni elemento (cioè lo spazio occupato in memoria da ciascun elemento
  • dtype: scrive il tipo numpy del dato
  • astype(tipo): converte l’ndarray nel tipo specificato