Workflow: Desmos -> Selva3d -> 3D Printer (in 5 minutes!)

This is a continuation of the workflow series: part 1part 2, and part 3

This workflow was done entirely in the web browser and could be done on a chromebook. The only step that requires a more serious computer is sending the file to your 3D printer. Also, writing up this blog post took three times longer than the actual workflow!

Step 1: Desmos

Make a design in Desmos, turn off grid and axes and take a screenshot. Here’s the design that I worked with, and the screenshot that I used. I have the function listed twice so that the design was fully black, but I don’t think this would have mattered.
2016-09-21_08h07_43 2016-09-21_07h48_28

Step 2: Selva3d

Go to Selva3d and register for an account. Upload your screenshot and it will extrude it for you. Download the 3D file.

2016-09-21_08h10_30

Note, if you want slightly higher quality (for free), you can bring the image to inkscape, convert it to svg, and bring the svg file to tinkercad. This requires you to install software, but there are also online png -> svg converters. It’s one more step for a bit more quality.

2016-09-21_08h13_31

Step 3: 3D Printer

Bring the file to your 3D printing software for final tweaks. After 1 hour of printing, here’s the result!

fullsizerender

Sidenote, selva3d has some cool partners. Here you can very easily order a phone case with your design on it for $21.

2016-09-21_08h36_38

 

Workflow: Desmos -> Inkscape -> Laser Cutter

This is a continuation of the workflow series: part 1 and part 2.

Motivation

Have students create mathematical art in Desmos and bring that digital art into the physical world using a laser engraver. You can certainly bring any image from Desmos and engrave it into an object using a laser engraver, but this method allows you to cut out the actual line from the material so that all that is left is the shaded area.

Desmos

Create a design in desmos that has lines which are crossing at points. This method will use the laser to cut on each side of a line, so that the material “inside” the line will remain.

Here’s an example: Wavy Sine Circles. Turn projector mode on.

Screen Shot 2016-08-20 at 2.48.17 PM copy

 

Take a screenshot of your image.

Inkscape

Open the image with Inkscape (free and open source vector image editor), and then select the image by clicking on it.

 

Screen Shot 2016-08-20 at 2.49.28 PM copy

Go to Path -> Trace Bitmap.

Select Edge Detection. This selection will make vector lines on each edge of our original image.

Screen Shot 2016-08-20 at 2.50.05 PM copy

Drag one of the images sideways so that you can delete the original image and just have the vector image left.

Screen Shot 2016-08-20 at 2.50.20 PM copy

Save the vector as a .svg file so that your laser cutter will be able to follow the lines directly (Vector vs Pixel images).

Screen Shot 2016-08-20 at 3.16.59 PM copy

This output looks a bit “lacy” for most materials that I’d use in the laser cutter. The lines are too narrow. No problem, do the same steps with the original desmos image, but this time zoom out before you take your screenshot. Desmos will always make it’s lines a certain width, so if you zoom out, the lines will be relatively thicker. Here’s the result after a quick zoom out.

Screen Shot 2016-08-20 at 3.17.21 PM copy

Laser Time

Bring your .svg file to the laser cutter that you have available (or to a vinyl sticker cutter). Here are some results (these are test cuts on manila folders):

image_01-1

image_01

image_01-5 image_02

What do you think students could make with this workflow?

 

UPDATE

I’ve had some trouble with the output from inkscape giving me double lines, so that the laser is making two cuts really close to each other. Here’s a fix.

When you go to trace the bitmap, keep the selection on brightness cutoff.

2016-09-21_14h59_42

Result:

2016-09-21_15h00_00

Move the vector off of the original image and delete the original image (the one that is fuzzy).

 

2016-09-21_14h59_52

Change the fill and stroke to the following: No fill, black stroke.

2016-09-21_15h00_07

2016-09-21_15h05_47 2016-09-21_15h05_51

2016-09-21_15h00_20

Send to your laser cutter software. Much better!

2016-09-21_15h01_05

If you had a friend taking this class next year, what advice would you give them?

I asked the above question, If you had a friend taking this class next year, what advice would you give them?, to the outgoing PreCalculus H group last year. I’m giving the incoming PreCalculus H their responses. Here’s a link to all the responses, and here are some of the absolute jewels. (No editing was done on this document, exactly how the students responded, mistakes and all.)

  • Use your classmates for help and work together
  • Good luck….even though homework’s aren’t graded make sure to actually DO them fully because if you don’t you’ll fall so behind….and retake as much as you can
  • To study A LOT and with a group of people so that if you have any questions you guys can talk about it together.
  • Also, you need to practice and study on your own if you do not understand something because it will catch up to you. You will not do well on the B quizzes if you don’t fully understand the material. If studying on your own doesn’t work, get extra help from a teacher.
  • There’s a lot of material you will cover in this course, and you want to be able to look back on it at the end of the quarter / year. This course will never be easy, but it is manageable. Reassess every opportunity you get, even if it’s just a 4.5. If your scared you’ll lower your grade if you get a 4.5, you probably don’t know the material as well as your grade shows that you do, and you’ll suffer at the end of the quarter because of it.
  • Take take homes seriously and do them with your friends, though never just copy what they have down. Though the skills on a take home are much more complex that what you need to do in class, they are skills you need to relatively comfortable with, and they actually do help a lot. If you don’t understand anything that you wrote down, stay after with Danderson and review the concepts. He can’t help you with the take home, but he can help you with the skills to do it (skills that you will need come midterm / final).
  • Don’t be afraid to rely on people. You aren’t going to be able to get through this class alone even if you are like a math whiz.

thats-gold-jerry-gold-kenny-bania-seinfeld-quote

IMG_4668

Workflow: Desmos -> Processing -> Fiji -> 3D Print

Note: this post is a more advanced version of the previous post and uses slightly different software. All this software is free and open-source.
In this post I’m going to outline how to use a workflow to go from a desmos sketch to a processing sketch to Fiji to a 3D file. The basic idea of the workflow is based on the idea of looking at a 3D object as a 2D image which is changed through time. Here’s a gif (source) that shows how we can view a cube (a 3D object) as a 2D slice.

cuicse

So if we can create the 2D sketch, then we can create the 3D object with Fiji. Here’s a video that contains a walkthrough of all the steps involved in this process in more detail.

Desmos Sketch

I used Desmos as a tool for quickly prototyping the 2D sketch. The original idea was to make a wavy cup. So the cup would start with a circle base, and slowly change up the walls to have a wavy top. Here’s the desmos sketch that shows the cup being sliced from the bottom to the top:

gifsmos

(There is more detail on how this sketch was created in the video.)

Processing Sketch

Next, we can bring the sketch to Processing so that we can easily save a bunch of frames and have a lot of control over all the details. Here’s the live code (had to be modified for openprocessing because PShape isn’t supported in JS), and here’s the original code. Once again, much more detail is available in the video.

ezgif.com-video-to-gif

Fiji

Next bring the 400 frames into Fiji. Fiji is often used for stitching 2D images from MRI machines into 3D objects.

Screen Shot 2016-07-07 at 2.06.36 PM

MeshLab

This is an optional step for shrinking the number of triangles used, and hence shrinking the model size.

3D Print

Shown with Makerbot, but every 3D printer has software that can do these steps.

Screen Shot 2016-07-07 at 2.09.28 PM

and two hours later:

IMG_4668

More Wavy Cups

These both use a different period for the sine function, and the second adds in a sine inside the first sine based on the height to give it the “wiggle” back and forth.

IMG_4670 IMG_4669

Spiral Ball

These were teased in a couple of tweets, the concept is the same as the wavy cup, but the size of each slice is controlled by a circle function. The desmos sketches are linked in the tweets.

IMG_4671 IMG_4673 IMG_4677

The black spiral ball uses consecutive fibonacci periods spinning in different directions, which is why it looks like a pine cone.

Fresnel Lens Sphere

Here’s the desmos sketch for this (admittedly weird model).

gifsmos (1)

Screen Shot 2016-07-07 at 2.36.49 PM

Dragon Fractal

These were directly coded in processing, here’s the originating code to make the fractal.

IMG_4678 IMG_4679

Let me know if you know of a different way of making this kind of 3d model! It works pretty well, but there are some rough edges with taking the 2D images to make the 3D model. Cheers!

FullSizeRender

Workflow: Daily Desmos -> Desmos -> Madeup -> 3D Print

The seniors don’t go to school on the last day, so I had calculus class on Friday with one student (a junior). We went down to the innovations lab to create things. Here’s what we worked on:

Took this sketch from dailydesmos:

2016-04-21_07h38_06

I had the student work on the solution after talking about superellipses (or the better name, squircles).

When he finished the solution, we modified it to get this sketch:

dwabvz8q0t

and we decided to try and get a 3D print of this sketch. We started working in madeup (a fantastic beta of a program that takes code and creates 3D models), but found it tricky to graph the function. Went back to desmos to get this sketch where we could figure out how to get the specific coordinates of points along the curve.

cp6i3eokwg

Fiddled around for a bit to get this result:
ezgif.com-optimize (1)

Here’s the code:

to abs x = if x > 0 then x else -x

to func t_ a_
  if (t_ < 0)
    t_ = t_ * -1
  end
  out = a_ - t_ ^ 4
  if (out < 0)
    out = abs out
    out = out ^ (0.2)
    out = - out
  else 
    out = out ^ (0.2)
  end
  out
end


a = 20
h = 0
while a > 0
    t = -3
    while t < 3
        x = t
        y = func t,a
        moveto x,y,h
        t = t + 0.025
    end
    h = h + 0.1
    extrude 0,0,1,-0.1
    a = a - 1
end

Then click on the solidify button and download the model.

2016-06-13_10h44_39

Send to makerbot, and pick up first thing monday!

FullSizeRender

 

FullSizeRender (1)

Thoughts on the Intersection of Math and Programming

I’ve been interested in the intersection between Math and Programming ever since I taught my first programming course 12 years ago (call it coding, CS, whatever you’d like). I think I’m finally starting to figure it out. Maybe. I was prodded by Dan Meyer and Julia Tsygan to think more in detail about this intersection:

Failures

I’ve failed at teaching math topics directly through programming in math class. Maybe it’s a symptom of teaching math courses that are CHOCK full of material (IB PreCalculus Honors, and IB Calculus HL), but I just don’t seem to have the time to have the students work through the material at an appropriate rate. Or I’ve picked bad topics to try and teach through programming. Or it’s been a challenge to adapt to the different levels of student programming knowledge coming into math class. I don’t know. I’ve tried teaching arithmetic and geometric sequences and series with Python and loops, and I’ve tried teaching some probability through Python. No luck. I think it boiled down to the following problem:

  • It’s tough to teach programming concepts AND sequences and series without taking a long time to build up. How can you (quickly) learn whether or not a series converges without having first understanding how a loop works, how variables work, and maybe how conditionals work. For example, this line of code, while easy for a programmer to understand, is *really* confusing for a new programmer in math class
    x = x + 1

    This line of code takes the current value of x, adds one, then stores it back into the variable x. “=” in most programming languages is an assignment operator, and “==” is an equality operator. Ich.

Small Successes

I think there ARE ways to teach a bit of math through programming. I just think that it’s use is limited. I presented on one of these topics at NCTM’s Annual Meeting in April of 2016, and at Twitter Math Camp in July 2015. All my resources are found here: Geometry from Scratch. Click through to get more details, but it boils down to the idea that you can be successful teaching Geometry or Middle School students about angles and polygons by having them use focused play in Scratch. They’ll discover the Exterior Angle Theorem after they’re asked to draw a hexagon. Likewise you can teach Geometry, Algebra, or Middle School students about slopes and lines by having them draw lines by making stairs.

Can you teach a big part of the math curriculum through programming in math class? Sure! In the same amount of class time? Nope!

Larger Successes

I think the biggest gain can be found by teaching math topics in programming classes. The sticking point? They might all learn DIFFERENT math topics. At the end of our programming class, I give the students about 4 weeks to work on whatever project that they’d like. It’s graded on a loose rubric that is just looking for programming milestones. Out of a class of 16 students this year, here is a subset of their work when it came to learning and applying math topics to their work. Keep in mind, I gave no guidance to them learning math topics, these came up naturally from our previous work, and after they saw some examples of mathematical computer art (more on this later? Future blog post?)

FullSizeRender (1)

(This is my student math art gallery that just started!)

The left picture is from a student who was having trouble landing on a specific topic and so just ended up making many smaller ideas into one project. You can read more in her blog post.

Here’s some code from her (all completely from scratch):

 while (theta < 4*PI) {
    x = r*cos(theta);
    y = r*sin(theta);
    z = 2*r*cos((theta+PI/25));//finds the new point that the line should go to
    s = 2*r*sin((theta+PI/25));
    x = map(x, -400, 400, 0, width);
    y = map(y, -400, 400, 0, width);
    z = x-z;
    s = y-s;
    lines(x,y,z,s);//calls the function lines
    theta = theta + PI/25;//repeats it until theta = 4PI so that the lines go in a circle
    }

This student is using polar coordinates that she learned in PreCalculus class, trigonometry with radians, and has used a proprortion to work with the colors (the map command).  Later on the student uses the % operator, which calculates the remainder so that she can cycle through a set of drawing commands.

The picture on the right is from a student who was going to extend the Geometry from Scratch polygon angles from above. But the move and turn commands were too limited for him, so after a 5 minute talk, he learned how to use polar form of coordinates to easily make a n-gon from a given center. Keep in mind, that this student hadn’t heard of polar coordinates before and mastered them to get these shapes. I’m excited to see how much knowledge he’ll bring to PreCalculus next year when polar coordinates are officially “taught” to him. Here’s his blog post for his project.

20160609_121151

This student designed a 3d model with code to create this fantastic piece of math art. It is a series of cocentric circles that represents the digits of pi, the center of the circle has a small circle with height 3. The next circle has height 1, then 4, then 1, … Here’s his blog post with code samples. He used 3D polar coordinates as well, and he made many connections to his project and the integration unit of his calculus class (rotational volumes).

particledrawing

This graphics program uses polar coordinates (yep again!), transparency, circles, trigonometry, lines, triangles and so much more to make some fantastic images. His blog post with more info.

ezgif.com-optimize

This student did a project that has a grid of rectangles in a 3D environment and he rotates them in 3D based on a periodic pattern and the mouse position. Some really great use of translations, rotations, and 3D geometry. Here’s his blog post.

Capture1-1

This student made a tank shooter game where the user (blue) battles the AI enemy (red). The really great math that this student had to apply and learn was the use of arctan to get an angle between two coordinates so that he could shoot between the coordinates. Impressive math. Blog post (sadly without the code or a link!).

ezgif.com-resize

Lastly, here’s a student’s work on making a bunch of bouncing coins. The math that this student had to work through was using vectors to make a gravity system and to obey Newton’s first law of motion. This senior hadn’t taken any math class that had vectors, nor had he taken any physics class. Yet he mastered the idea of velocity vectors to get the motion to work properly. He also was somewhat successful in making a collision system (from scratch!), a very hard task. His blog post.

Conclusion

I don’t know. That feels like much of my progress into adulthood. I’m less definitive about statements. I know that I don’t know a whole lot.

 

 

 

 

What to do post AP/IB exam?

With the IB exams coming up soon, I’ve started to put more thought into what we should do after the exams (we’ll have 8 blocks or so). For the past three years we did free-form math projects and last year they even wrote up great blog posts about their projects. But due to less time left (we used to have about 12 classes) and the fact that this class just finished a ~10 page math exploration for the IB exam, I don’t think it’d be as successful. So I’ve had thoughts about having them explore some sort of math-coding thing, very few have taken a programming class in HS due to over scheduling, but are interested in it, and those who have would certainly not be bored. Or we could work on one low floor, high ceiling problem per day for the rest of the year (something like the three triangles problem). Or mix both these and do a bit of both.
I’ll certainly poll the students and see where their interests lie, but I’d like to see what you think. What do you do after the AP/IB exams? What do you think of the programming and/or problem solving sessions?
Thank you for your input.