Wireframe 4

from vpython import *
 
C1 = color.yellow
C2 = color.red
C3 = color.green
C4 = color.blue

#----------------------- CUBO interno
p11 = vector( 1,  1,  1)
p12 = vector( 1, -1,  1)
p13 = vector(-1, -1,  1)
p14 = vector(-1,  1,  1)
p15 = vector( 1,  1, -1)
p16 = vector( 1, -1, -1)
p17 = vector(-1, -1, -1)
p18 = vector(-1,  1, -1)
#----------------------- CUBO esterno
p21 = vector( 2,  2,  2)
p22 = vector( 2, -2,  2)
p23 = vector(-2, -2,  2)
p24 = vector(-2,  2,  2)
p25 = vector( 2,  2, -2)
p26 = vector( 2, -2, -2)
p27 = vector(-2, -2, -2)
p28 = vector(-2,  2, -2)
 
R1 = 0.2
R2 = 0.1
#----------------------------------------------------- SFERE gialle
sphere(color = C1, pos = p11, radius = R1)
sphere(color = C1, pos = p12, radius = R1)
sphere(color = C1, pos = p13, radius = R1)
sphere(color = C1, pos = p14, radius = R1)
sphere(color = C1, pos = p15, radius = R1)
sphere(color = C1, pos = p16, radius = R1)
sphere(color = C1, pos = p17, radius = R1)
sphere(color = C1, pos = p18, radius = R1)

sphere(color = C1, pos = p21, radius = R1)
sphere(color = C1, pos = p22, radius = R1)
sphere(color = C1, pos = p23, radius = R1)
sphere(color = C1, pos = p24, radius = R1)
sphere(color = C1, pos = p25, radius = R1)
sphere(color = C1, pos = p26, radius = R1)
sphere(color = C1, pos = p27, radius = R1)
sphere(color = C1, pos = p28, radius = R1)
#----------------------------------------------------------- CILINDRI rossi
cylinder(axis = p12-p11, color = C2, pos = p11, radius = R2)
cylinder(axis = p13-p12, color = C2, pos = p12, radius = R2)
cylinder(axis = p14-p13, color = C2, pos = p13, radius = R2)
cylinder(axis = p11-p14, color = C2, pos = p14, radius = R2)

cylinder(axis = p16-p15, color = C2, pos = p15, radius = R2)
cylinder(axis = p17-p16, color = C2, pos = p16, radius = R2)
cylinder(axis = p18-p17, color = C2, pos = p17, radius = R2)
cylinder(axis = p15-p18, color = C2, pos = p18, radius = R2)

cylinder(axis = p15-p11, color = C2, pos = p11, radius = R2)
cylinder(axis = p16-p12, color = C2, pos = p12, radius = R2)
cylinder(axis = p17-p13, color = C2, pos = p13, radius = R2)
cylinder(axis = p18-p14, color = C2, pos = p14, radius = R2)
#----------------------------------------------------------- CILINDRI verdi
cylinder(axis = p22-p21, color = C3, pos = p21, radius = R2)
cylinder(axis = p23-p22, color = C3, pos = p22, radius = R2)
cylinder(axis = p24-p23, color = C3, pos = p23, radius = R2)
cylinder(axis = p21-p24, color = C3, pos = p24, radius = R2)

cylinder(axis = p26-p25, color = C3, pos = p25, radius = R2)
cylinder(axis = p27-p26, color = C3, pos = p26, radius = R2)
cylinder(axis = p28-p27, color = C3, pos = p27, radius = R2)
cylinder(axis = p25-p28, color = C3, pos = p28, radius = R2)

cylinder(axis = p25-p21, color = C3, pos = p21, radius = R2)
cylinder(axis = p26-p22, color = C3, pos = p22, radius = R2)
cylinder(axis = p27-p23, color = C3, pos = p23, radius = R2)
cylinder(axis = p28-p24, color = C3, pos = p24, radius = R2)
#----------------------------------------------------------- CILINDRI blu
cylinder(axis = p21-p11, color = C4, pos = p11, radius = R2)
cylinder(axis = p22-p12, color = C4, pos = p12, radius = R2)
cylinder(axis = p23-p13, color = C4, pos = p13, radius = R2)
cylinder(axis = p24-p14, color = C4, pos = p14, radius = R2)

cylinder(axis = p25-p15, color = C4, pos = p15, radius = R2)
cylinder(axis = p26-p16, color = C4, pos = p16, radius = R2)
cylinder(axis = p27-p17, color = C4, pos = p17, radius = R2)
cylinder(axis = p28-p18, color = C4, pos = p18, radius = R2)

Prova il codice seguente

  • il cubo rosso interno si muove…
  • se togli i commenti alla fine si muove anche il cubo verde
from vpython import *
  
C1 = color.yellow
C2 = color.red
C3 = color.green
C4 = color.blue
R1 = 0.2
R2 = 0.1

PUNTI_IN_A   = [vector(1,1,1), vector(1,-1,1), vector(-1,-1,1), vector(-1,1,1)]
PUNTI_IN_P   = []
PUNTI_OUT_A  = []
PUNTI_OUT_P  = []

SFERE_IN     = []
SFERE_OUT    = []
CILINDRI_IN  = []
CILINDRI_OUT = []
CILINDRI     = []

for pa in PUNTI_IN_A:
    pp = vector(pa.x, pa.y, -1)                   ; PUNTI_IN_P.append(pp)
    Pa = 2*pa                                     ; PUNTI_OUT_A.append(Pa)
    Pp = 2*pp                                     ; PUNTI_OUT_P.append(Pp)

    s  = sphere(color = C1, pos = pa, radius = R1); SFERE_IN.append(s)
    s  = sphere(color = C1, pos = pp, radius = R1); SFERE_IN.append(s)
    s  = sphere(color = C1, pos = Pa, radius = R1); SFERE_OUT.append(s)
    s  = sphere(color = C1, pos = Pp, radius = R1); SFERE_OUT.append(s)
        
    c = cylinder(axis = Pa-pa, color = C4, pos = pa, radius = R2)
    c.pos2 = Pa                                                  ; CILINDRI.append(c)    
    c = cylinder(axis = Pp-pp, color = C4, pos = pp, radius = R2)
    c.pos2 = Pp                                                  ; CILINDRI.append(c)

for i in range(4):
    p1 = PUNTI_IN_A[i]
    p2 = PUNTI_IN_A[(i+1)%4]   
    c  = cylinder(axis = p2-p1, color = C2, pos = p1, radius = R2)
    c.pos2 = p2                                                   ; CILINDRI_IN.append(c)
    p1 = PUNTI_IN_P[i]
    p2 = PUNTI_IN_P[(i+1)%4]   
    c  = cylinder(axis = p2-p1, color = C2, pos = p1, radius = R2)
    c.pos2 = p2                                                   ; CILINDRI_IN.append(c)
    p1 = PUNTI_IN_A[i]
    p2 = PUNTI_IN_P[i]   
    c  = cylinder(axis = p2-p1, color = C2, pos = p1, radius = R2)
    c.pos2 = p2                                                   ; CILINDRI_IN.append(c)     

    p1 = PUNTI_OUT_A[i]
    p2 = PUNTI_OUT_A[(i+1)%4]   
    c  = cylinder(axis = p2-p1, color = C3, pos = p1, radius = R2)
    c.pos2 = p2                                                   ; CILINDRI_OUT.append(c)
    p1 = PUNTI_OUT_P[i]
    p2 = PUNTI_OUT_P[(i+1)%4]   
    c  = cylinder(axis = p2-p1, color = C3, pos = p1, radius = R2)
    c.pos2 = p2                                                   ; CILINDRI_OUT.append(c)    
    p1 = PUNTI_OUT_A[i]
    p2 = PUNTI_OUT_P[i]
    c  = cylinder(axis = p2-p1, color = C3, pos = p1, radius = R2)
    c.pos2 = p2                                                   ; CILINDRI_OUT.append(c)

while(True):
    rate(20)

    rumore1 = vector.random()/10
   #rumore2 = vector.random()/10
    
    for s in SFERE_IN:  s.pos += rumore1
   #for s in SFERE_OUT: s.pos += rumore2
    for c in CILINDRI:
        c.pos  += rumore1
   #    c.pos2 += rumore2
        c.axis  = c.pos2 - c.pos
    for c in CILINDRI_IN:
        c.pos  += rumore1
        c.pos2 += rumore1
        c.axis  = c.pos2 - c.pos
   #for c in CILINDRI_OUT:
   #    c.pos  += rumore2
   #    c.pos2 += rumore2
   #    c.axis  = c.pos2 - c.pos