diff --git a/CreasePatternScripts/Hypar/Hypar.pde b/CreasePatternScripts/Hypar/Hypar.pde new file mode 100644 index 0000000000000000000000000000000000000000..c4fcad60cfbdaadf39b77a718f7f43cb0d5ff4ab --- /dev/null +++ b/CreasePatternScripts/Hypar/Hypar.pde @@ -0,0 +1,83 @@ +import processing.pdf.*; + +float numSegs = 100;//number of radial segments, this can be reduced to 4 to do a regular hypar +float outerRad = 200;//radius of outer border +float spacing = 8;//radial space between neighboring creases +int numPleats = 7;//number of mountain/valley pairs of circular creases + +boolean antisym = true;//symmetric vs antisymmetric triangulation +boolean triangulationsAsHinges = false;//draw triangulations as facets creases (yellow) or undriven hinges (magenta) + +void setup(){ + + size(450, 450); + + //tessellation + beginRecord(PDF, "Hypar.pdf"); + background(255); + pushMatrix(); + translate(width/2, height/2); + + //outer border + stroke(0); + drawRing(outerRad); + + //creases and triangulations + float rad = outerRad; + for (int i=0;i<numPleats;i++){ + drawHinges(rad, true); + rad -= spacing; + stroke(255,0,0); + drawRing(rad); + drawHinges(rad, false); + rad -= spacing; + stroke(0,0,255); + drawRing(rad); + } + drawHinges(rad, true); + + //inner border + rad -= spacing; + stroke(0); + drawRing(rad); + + //radial facet creases + stroke(255,255,0); + for (float i=0;i<numSegs;i++){ + float theta = i/numSegs*2*PI; + line(outerRad*cos(theta), outerRad*sin(theta), rad*cos(theta), rad*sin(theta)); + } + + endRecord(); + println("Finished."); +// exit(); +} + +void drawHinges(float rad, boolean opp){ + if (triangulationsAsHinges) stroke(255,0,255); + else stroke(255,255,0); + for (float i=0;i<numSegs;i++){ + float theta = i/numSegs*2*PI; + if (antisym){ + if (opp){ + if (i%2==0) line(rad*cos(theta), rad*sin(theta), (rad-spacing)*cos(theta-1.0/numSegs*2*PI), (rad-spacing)*sin(theta-1.0/numSegs*2*PI)); + else line((rad-spacing)*cos(theta), (rad-spacing)*sin(theta), rad*cos(theta-1.0/numSegs*2*PI), rad*sin(theta-1.0/numSegs*2*PI)); + } else { + if (i%2==1) line(rad*cos(theta), rad*sin(theta), (rad-spacing)*cos(theta-1.0/numSegs*2*PI), (rad-spacing)*sin(theta-1.0/numSegs*2*PI)); + else line((rad-spacing)*cos(theta), (rad-spacing)*sin(theta), rad*cos(theta-1.0/numSegs*2*PI), rad*sin(theta-1.0/numSegs*2*PI)); + } + } else{ + if (i%2==0) line(rad*cos(theta), rad*sin(theta), (rad-spacing)*cos(theta-1.0/numSegs*2*PI), (rad-spacing)*sin(theta-1.0/numSegs*2*PI)); + else line((rad-spacing)*cos(theta), (rad-spacing)*sin(theta), rad*cos(theta-1.0/numSegs*2*PI), rad*sin(theta-1.0/numSegs*2*PI)); + } + } +} + +void drawRing(float rad){ + for (float i=0;i<numSegs;i++){ + float theta = i/numSegs*2*PI; + line(rad*cos(theta), rad*sin(theta), rad*cos(theta-1.0/numSegs*2*PI), rad*sin(theta-1.0/numSegs*2*PI)); + } +} + + diff --git a/CreasePatternScripts/Hypar/sketch.properties b/CreasePatternScripts/Hypar/sketch.properties new file mode 100644 index 0000000000000000000000000000000000000000..8630fa24ac7a4cc1429c0aca64fb8630782f0cf6 --- /dev/null +++ b/CreasePatternScripts/Hypar/sketch.properties @@ -0,0 +1,2 @@ +mode.id=processing.mode.java.JavaMode +mode=Java diff --git a/CreasePatternScripts/README.md b/CreasePatternScripts/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1e477d20fa0b63017031abdde5d4db8fa5903f63 --- /dev/null +++ b/CreasePatternScripts/README.md @@ -0,0 +1,4 @@ +These are <a href="https://processing.org/" target="_blank">Processing</a> scripts I used to generate crease patterns +for some of the examples in the app. Processing exports pdfs with a +clipping mask, you will need to pull this into a vector editing program to remove +the clipping mask and save as SVG before importing it into the Origami Simulator app. \ No newline at end of file