Configuration space for Degree 6 Miura-ori vertex
Configuration space for Degree 6 Miura-ori vertex
Copy right: Bin Liu, Jesse L. Silverberg, Arthur A. Evans, Christian D. Santangelo, Robert J. Lang, Thomas C. Hull, and Itai Cohen
This code generates the configuration space of a degree 6 general Miura - ori vertex (i.e., a general Miura - ori vertex, with one parallelogram angle α and the other parallelogram angle β, but with virtual creases added for facet bending).
This code generates the configuration space of a degree 6 general Miura - ori vertex (i.e., a general Miura - ori vertex, with one parallelogram angle α and the other parallelogram angle β, but with virtual creases added for facet bending).
Vertex geometry
Vertex geometry
General vector operators.
RotX(Y/Z)[.] are the rotation operators. Mag [v] computes the magnitude of “v”, while Ang[u, v] computes the angle between “u” and “v”.
RotX(Y/Z)[.] are the rotation operators. Mag [v] computes the magnitude of “v”, while Ang[u, v] computes the angle between “u” and “v”.
Necessary functions for linear vector operations
Necessary functions for linear vector operations
RotY[y_]:={{Cos[y],0,-Sin[y]},{0,1,0},{Sin[y],0,Cos[y]}}RotX[x_]:={{1,0,0},{0,Cos[x],-Sin[x]},{0,Sin[x],Cos[x]}}RotZ[z_]:={{Cos[z],-Sin[z],0},{Sin[z],Cos[z],0},{0,0,1}}Mag[v_]:=Sqrt[v.v]Ang[u_,v_]:=ArcCos[(u.v)/(Mag[u]*Mag[v])]V1={1,0,0};V2[a_]:={Cos[a],Sin[a],0};V3[a_,b_]:={Cos[a+b],Sin[a+b],0};V4[a_,b_,c_,e_:0]:={Cos[a+b+(π-a-c)+e],Sin[a+b+(π-a-c)+e],0};V5[b_,e_:0]:={Cos[π+b+e],Sin[π+b+e],0};V6[b_,c_,d_,e_:0]:={Cos[π+b+c+d+e],Sin[π+b+c+d+e],0};
Vertex geometry as defined by angles a, b, c, d, e
Vertex geometry as defined by angles a, b, c, d, e
First let' s draw the vertex generally. The mountain creases are in red. The valley creases are in blue. The virtual creases are in dash lines. Here is the geometry by default.
a=π/3;b=π/3;c=π/3;d=0;e=0;
Manipulate[Graphics[{Red,Line[{{0,0},Drop[V1,-1]}],Blue,Line[{{0,0},Drop[V2[a],-1]}],Red,Line[{{0,0},Drop[V3[a,b],-1]}],Line[{{0,0},Drop[V5[b,e],-1]}],Black,Text["V1",Drop[V1,-1]],Text["V2",Drop[V2[a],-1]],Text["V3",Drop[V3[a,b],-1]],Text["V4",Drop[V4[a,b,c,e],-1]],Text["V5",Drop[V5[b,e],-1]],Text["V6",Drop[V6[b,c,d,e],-1]],Black,Dashed,Line[{{0,0},Drop[V4[a,b,c,e],-1]}],Line[{{0,0},Drop[V6[b,c,d,e],-1]}]}],{{a,π/3,"a"},0,π/2,Appearance"Open"},{{b,π/3,"b"},0,π/2,Appearance"Open"},{{c,π/3,"c"},0,π/2,Appearance"Open"},{{d,0,"d"},-π/4,π/4,Appearance"Open"},{{e,0,"e"},-π/4,π/4,Appearance"Open"},LocalizeVariablesFalse,ControlPlacementLeft]
Configuration-space analysis
Configuration-space analysis
Configuration spaces of an mathematically ideal degree-6 vertices
Configuration spaces of an mathematically ideal degree-6 vertices
Let’s have an example configuration space of the above vertex geometry without considering the any self-interception or pop-through error. The approach is the following: Because the sheets are not extensible, we have the distance between two neighboring vertices always non-larger the unfolded case. Regarding vertices V1 and V3, this condition can be expressed as ||V3-V1||≤. The 3D configuration space for the crease geometry above can thus be obtained by satisfying this criterion, which can be represented by RegionPlot3D. [Note: Update the above geometry first using the interactive interface for desired crease pattern before updating the configuration space.]
2-2Cos[a]Cos[b]+2Sin[a]Sin[b]
RegionPlot3DMag[RotZ[π+b+c+d].RotX[-t6].RotZ[-π-b-c-d].RotZ[-(π-b)].RotX[-t5].RotZ[π-b].RotZ[π+b-c].RotX[-t4].RotZ[-π-b+c].V3[a,b]-V1]≤"]],Text[Style[""]],Text[Style[""]]},LabelStyle{Large,Black}
2-2Cos[a]Cos[b]+2Sin[a]Sin[b]
,{t6,-1.5,1.5},{t5,-Pi,0},{t4,-1.5,1.5},AxesLabel{Text[Style["t
6
t
5
t
4
Exact configuration spaces (without self-interceptions or misfolds)
Exact configuration spaces (without self-interceptions or misfolds)
Now let’s consider other constraints for a more realistic vertex:
Excluding self-interception in the accessible configurations (through the condition test function “GCIntersectMiuraQ”)
Excluding self-interception in the accessible configurations (through the condition test function “GCIntersectMiuraQ”)
mapping=CoordinateTransformData[{"Cartesian""Spherical",3},"Mapping"];GCCross[v1_,v2_]:=Module[{pcrss},pcrss=Cross[v1,v2];pcrss=If[Norm[pcrss]>0,pcrss/Norm[pcrss],v1]];GCIntersection[p1_,p2_,p3_,p4_]:=Module[{v1,v2,pcrss},v1=Cross[p1,p2];v2=Cross[p3,p4];pcrss=GCCross[v1,v2]];BWLinesQ[p1_,p2_,p3_]:=Cross[p1,p3].Cross[p2,p3]<-1.`*^-8;GCIntersectionQ[p1_,p2_,p3_,p4_]:=Module[{vv,vang,lp,pcrss},pcrss=GCIntersection[p1,p2,p3,p4];(BWLinesQ[p1,p2,pcrss]&&BWLinesQ[p3,p4,pcrss])||(BWLinesQ[p1,p2,-pcrss]&&BWLinesQ[p3,p4,-pcrss])];GCIntersectMiuraQ[p_]:=GCIntersectionQ[p[[1]],p[[2]],p[[3]],p[[4]]]||GCIntersectionQ[p[[1]],p[[2]],p[[4]],p[[5]]]||GCIntersectionQ[p[[2]],p[[3]],p[[4]],p[[5]]]||GCIntersectionQ[p[[2]],p[[3]],p[[5]],p[[6]]]||GCIntersectionQ[p[[2]],p[[3]],p[[6]],p[[1]]]||GCIntersectionQ[p[[3]],p[[4]],p[[5]],p[[6]]]||GCIntersectionQ[p[[3]],p[[4]],p[[6]],p[[1]]]||GCIntersectionQ[p[[4]],p[[5]],p[[6]],p[[1]]];RealQ[x_]:=Element[x,Reals]===True;RealQN[x_]:=Abs[Im[x]]<1`*^-15;
Excluding the pop-through misfolds in the configurations (through the condition test function “PopthroughQ”)
Here, we generate the configuration space in 3D spaces composed by folding angles t4, t5, and t6. Increasing the resolution by increasing the number of “Plot points.”