Creating Rotated Solids Using GeoGebra 3D

One of the hardest Calculus topics for my students to visualize is rotating areas around an axis to create a solid. Fortunately, you can now create a great 3D representation of rotated solids using GeoGebra’s 3D app. Once you get the hang of it, it is quick and a heck of a lot easier than trying to draw them by hand!

Before I go any further, I want to give credit to Steve Phelps for posting a demo of this technique on his Twitter feed. If you are a math teacher, you really should follow him @MathTechCoach. I have learned more cool tech tricks from him than anyone else online.

Here’s my screencast illustrating how to create your very own rotated solids:


The Mathematician As Artist, 2019 Edition

It’s Winterim again at Harpeth Hall School. This three-week interval between semesters is an opportunity for teachers and students to enjoy an alternative curriculum and pursue topics that are not often taught in a traditional course.

This year I am once again teaching my Mathematician As Artist course. We began by creating art using only a straight-edge and compass. These designs were based on a process pioneered by Dearing Wang:

Next, we constructed Voronoi Diagrams by hand. Here’s an excellent tutorial on the process. In a Voronoi Diagram, each color represents all the points that are closest to the node (the black point) within that color.

Our latest project involved using Chaoscope to create fractals. It’s an easy program for a beginner, but there are endless options for more advanced users. Here are the students’ pieces:

I will do a separate post for my students’ final projects – stained-glass windows!


Coding With Processing, Part 5

Now we’re getting somewhere! In Chapter 7 of Daniel Shiffman’s Learning Processing, I learned how to define a function, which makes coding repeated objects so much easier. For this exercise, I had to define a function (named drawFlower) that drew a flower. I defined variables for the placement of each flower and the color of its petals. Here’s the result:

Here’s the code:

void setup() {
size(600, 400);

void draw() {
//Sky-blue background
background(0, 191, 255);

//For the drawFlower function, enter the x-coordinate of the flower’s center,
//the y-coordinate, and the r, g, b values for the petals.
drawFlower(100, 85, color(255, 255, 0));
drawFlower(200, 100, color(255,69,0));
drawFlower(150, 200, color(218,112,214));
drawFlower(300, 225, color(230,230,250));
drawFlower(400, 80, color(250,250,210));
drawFlower(480, 150, color(255,99,71));
drawFlower(440, 230, color(138,43,226));

void drawFlower(int centerX, int centerY, color c) {

//Draw the stem
stroke(0, 255, 100);
line(centerX, centerY + 15, centerX, centerY + 115);

//Draw the leaves
fill(0, 255, 100);
ellipse(centerX-40, centerY+40, 80, 20);
ellipse(centerX+40, centerY+40, 80, 20);

//Draw the center of the flower
ellipse(centerX, centerY, 30, 30);

//Draw the petals
ellipse(centerX, centerY+40, 20, 40);
ellipse(centerX-40, centerY, 40, 20);
ellipse(centerX+40, centerY, 40, 20);
ellipse(centerX, centerY-40, 20, 40);


Coding With Processing, Part 4

I’m continuing to work my way through Daniel Shiffman’s Learning Processing. Here is the result of incorporating variables and conditionals into my Lesson One Project: a bouncing dog that stays within the viewing window:

You can view the actual project here:

Here is the code:

float x = 200;
float y = 0;
int speedX = 1;
float speedY = 0;
float gravity = 0.1;

void setup() {
//Set window size
void draw() {
//Draw a black background

//Set ellipses and rects to CENTER mode

//Change the x location by speedX
x = x + speedX;
//If dog reaches edge, reverse course
if ((x > width)|(x < 0)) {
speedX = speedX*-1;

//Start y dropping
y = y + speedY;
speedY = speedY + gravity;

//Draw the body
rect(x, y, 300,150);

//Draw the head
ellipse(x+225, y, 150,200);

//Draw the mouth and nose
line(x + 200, y + 40, x + 250, y + 40);
line(x + 225, y – 25, x + 225, y + 25);

//Draw the eyes
ellipse(x + 200, y- 30, 30, 50);
ellipse(x + 250, y – 30, 30, 50);

//Draw the legs
line(x – 100,y + 75,x – 150, y + 150);
line(x – 100, y + 75, x – 50, y + 150);
line(x + 100, y + 75, x + 50, y + 150);
line(x + 100, y + 75, x + 150, y + 150);

//Draw the tail
line(x – 150,y, x – 250, y – 100);

//Bounce back up
if (y > height) {
speedY = speedY*-0.95;
y = height;