Вы должны вернуть c
и использовать compound
как для topleftfrontcorner
, так и для topmiddlefrontside
:
from vpython import *
def create_cube(pos,size,front,back,left,right,bottom,top):
c = [ pyramid(pos=pos-vector(0.5,0,0),size=size,color=left),
pyramid(pos=pos+vector(0.5,0,0),size=size,color=right).rotate(angle=radians(180),axis=vector(0,1,0)),
pyramid(pos=pos+vector(0,0,0.5),size=size,color=front).rotate(angle=radians(90),axis=vector(0,1,0)),
pyramid(pos=pos-vector(0,0,0.5),size=size,color=back).rotate(angle=radians(270),axis=vector(0,1,0)),
pyramid(pos=pos-vector(0,0.5,0),size=size,color=bottom).rotate(angle=radians(90),axis=vector(0,0,1)),
pyramid(pos=pos+vector(0,0.5,0),size=size,color=top).rotate(angle=radians(270),axis=vector(0,0,1)),
box(pos=pos,size = vector(0.9,0.9,0.9),color=color.black)]
return c
topleftfrontcorner = create_cube(vector(-1,1,1),vector(0.5,0.90,0.90),color.red,color.black,color.blue,color.black,color.black,color.yellow)
topmiddlefrontside = create_cube(vector(0,0,0),vector(0.5,0.90,0.90),color.red,color.black,color.black,color.black,color.black,color.yellow)
compound(topleftfrontcorner, topmiddlefrontside)
. Это дает мне: ![enter image description here](https://i.stack.imgur.com/lpP5n.png)
Может быть, кто-то более знакомый с vpython
может объяснить больше, но в целом есть разница между созданием куба и рендерингом куба.Причина, по которой вы не видите два куба в своем фрагменте, заключается в том, что программа все еще выполняет рендеринг первого куба (операция блокировки) и даже не оценила второй вызов функции.Вы можете убедиться в этом, поместив print("hello!")
между двумя вызовами функций;"hello!"
никогда не печатается, потому что программа все еще занята рендерингом topleftfrontcorner
.
В обновленном фрагменте кода мы создаем два куба, а затем визуализируем их одновременно.