From: Poul R. <Pou...@sk...> - 2008-09-28 07:41:44
|
I still can't see in the manual how two to specify different normals at different vertices in the faces object. I tried triangle=faces(pos=[v1,v2,v3],normal=[n1,n2,n3],color=c) but it didn't work. On the other hand, replacing color=c with color=[c1,c2,c1] works fine. The example below works, but not if I replace normal=n12 with normal=[n1,n12,n12] One further question: How can I make a copy of ny adjacent triangles before rotating them? I tried __copy__() but couldn't make it work. Poul Riis from visual import * def triangle3d(v1,v2,v3,trianglecolor): c = color.hsv_to_rgb(trianglecolor) n = norm(cross(v2-v1,v3-v1)) triangle1=faces(pos=[v1,v2,v3],normal=n,color=c) triangle2=faces(pos=[v2,v1,v3],normal=-n,color=c) def adjacenttriangles3d(v1,v2,v3,v4,trianglecolor1,trianglecolor2,rotateang): c1 = color.hsv_to_rgb(trianglecolor1) c2 = color.hsv_to_rgb(trianglecolor2) backsidecolor1=(1-trianglecolor1[0],trianglecolor1[1],trianglecolor1[2]) backsidecolor2=(1-trianglecolor2[0],trianglecolor2[1],trianglecolor2[2]) bsc1 = color.hsv_to_rgb(backsidecolor1) bsc2 = color.hsv_to_rgb(backsidecolor2) n1 = norm(cross(v2-v1,v4-v1)) n2 = norm(cross(v3-v2,v4-v3)) n12 = norm((n1+n2)/2) twotriangles=frame() faces(frame=twotriangles,pos=[v1,v2,v4],normal=n12,color=[c1,c2,c1]) faces(frame=twotriangles,pos=[v2,v3,v4],normal=n12,color=[c2,c1,c2]) faces(frame=twotriangles,pos=[v2,v1,v4],normal=-n12,color=bsc1) faces(frame=twotriangles,pos=[v3,v2,v4],normal=-n12,color=bsc2) twotriangles.rotate(angle=rotateang, axis=(1,0,0), origin=(0,0,0)) scene=display(title="Two adjacent triangles",width=600,height=600,forward=(-2,-1,-0.5),up=(0,0,1),background=(1,1,1)) # Grid in xy-plane: for i in range(-10,11,1): gridlinesx=curve(pos=[(i,-10,0),(i,10,0)],color=crayola.black) gridlinesy=curve(pos=[(-10,i,0),(10,i,0)],color=crayola.black) # Axes: xaxis=arrow(pos=(-10,0,0),axis=(20,0,0),shaftwidth=0.02,color=crayola.green) yaxis=arrow(pos=(0,-10,0),axis=(0,20,0),shaftwidth=0.02,color=crayola.green) zaxis=arrow(pos=(0,0,-10),axis=(0,0,20),shaftwidth=0.02,color=color.hsv_to_rgb((0.8,0.7,0.9))) # Four points, A, B, C, and D: A=vector(5,0,0) B=vector(8,10,0) C=vector(0,7,0) D=vector(0,0,15) # Objects: adjacenttriangles3d(A,B,C,D,(0.5,1,0.95),(0.75,1,0.95),pi/4.) |