Wednesday, January 18, 2017

a julia and mandelbrot fractals page

A Julia dendrite

A few years back, I posted about generating my first image of a Mandelbrot set using Processing. I decided to do it again, mostly to get some more JavaScript practice. So now a page that generates some Mandelbrot and Julia set fractals is available here.

AnotherJulia set fractal

The fractals are generated almost exactly as described in that earlier post. The only difference is the JavasScript and HTML infrastructure. Source is here for the curious.

Friday, December 23, 2016

life lessons from a knight's tour

Please check out these interactive puzzles: kixote (knight's tour) puzzles, and hidato (king's tour) puzzles.

Both are based on the idea of a solitary chess piece roaming around an otherwise empty board. A "tour" is completed if the piece touches every square exactly once.

Solving these puzzles involves revealing the hidden steps in the correct order to complete the tour. For example, in the kixote puzzle below, the first step in the tour is highlighted.

We need to find the second step in this tour. Based on how knights move, there are two options: the cell to the right of 19, and the cell to the left of 57. Looking at where the third step is (third cell down in the last column), we realise that the cell next to 19 must be number 2. Clicking on that, we unlock the next few steps in the tour:

Now at step 4, we need to find step 5, and to do that, we look at where step 6 is... and continue in that way until all the steps are revealed.

If you try this a few times, you may notice that although each tour is different, they tend to follow a familiar pattern of cycling around the edge of the board in their early stages, sometimes hopping around in the corners before moving along:

The tours look like this because of the technique used to generate them: the puzzle generator is not randomly selecting which square to move to, if it did this, it might take a long time to come up with a proper tour for you to solve. Instead of randomly selecting each move, the generator is using a heuristic to pick squares that will most likely lead to a completed tour.

To a knight, an empty chessboard looks something like this:
knight's graph

Two cells are connected if the knight can jump from one to the other. Some cells are better connected than others. The image below shows the number of connected neighbours for each cell:

The rule used by the tour generator is to always select a reachable cell that has the fewest free neighbours. This leads us towards the edges and into the corners, leaving the wide-open and accessible centre for the end. Obviously, this is not the only strategy that will work: every knight's tour is reversible, so each path which starts on the edges and corners could be flipped to produce a tour that starts at the centre. But the "start with the least open cells" is a strategy that works well, frequently producing complete tours.

Maybe there is some lesson here for many tasks: when faced with a list of things to be completed, start with the less attractive options first, and save the best until last.

Tuesday, November 29, 2016

polynomial grid division examples

There are not enough examples of polynomial division using the grid method out there. To remedy that, I have posted about 100 billion examples for your viewing pleasure. Please check ‘em out:

Jokes aside, I was looking for a small JavaScript project, and this one looked like it would be fun. It was, and I learned a few things by building it. The page will generate a small number of examples, but you can get a fresh batch by reloading. Each example is calculated on the fly, and rendered using MathJax. Currently, the displayed calculations look like this:

About half the time the examples have remainders, and the calculations vary in length and complexity in no particular order, so if you get a crop of examples that look too intimidating, or too easy, just keep trying and you should get ones more to your liking. If you see one you like, you should copy it down: you may never see it again.

I have plans to make the examples configurable and to show each part of the calculation step by step, but I may not get around to doing that for a while.

Please let me know if you get some use out of this page, particularly if you run into any trouble with it. 

Overviews of how to carry out the grid method, also called the generic rectangle method or the reverse tabular method, can be found here and here. The page does not currently provide any ‘backwards reverse tabular’ calculations, as described here.

Update: The page now allows you to choose if you want remainders or not, and does try to show some of the steps in the calculation.

Friday, November 18, 2016

Desmos polygonal number diagrams

Polygonal numbers are a favorite topic in recreational math and there are quite a few posts about them on this blog (such as this one, here). The image above hints at some of their interest: polygonal numbers, like the pentagonals shown above have numerical properties that translate nicely into visual properties in their associated diagrams.

The very first post of this blog had some instructions for how to generate polygonal number diagrams using Fathom or Tinkerplots (two dynamic data environments; their successor CODAP seems to have the same capabilities), so attempting to do the same in Demos seemed like a good idea.

The first few triangular number diagrams

You can play with the graph here. With it you can choose an n and k value which will plot (x, y) values that will form an n-dot k-polygonal number diagram, with or without the connecting lines.

Some examples from the polygonal
number graph

If the dots form a complete diagram, that means that n is a k-polygonal number. So this graph will draw partial diagrams. For example, you can draw a square with 9 dots, so it's a square number, but you can't draw a square with 10 dots, so it is not a square number. You can draw a hexagon with 15 dots, so it's hexagonal, but you cannot do the same with 26.

15 is hexagonal, 26 is not

To understand the formulas, or come up with your own, you need to be aware of the rules for how to form polygonal diagrams, which are based on the idea of adding a layer of points (called a gnomon) to the previous k-polygonal number to get the current k-polygonal number. Using the graph, you can likely figure out the rule how many dots will be in each gnomon for a given layer and k value.

pentagonal 12, gnomons
shown on right

81 is the sixth heptagonal number: 
there are 5 gnomons (of 5 sides each) layered on 
top of 1 to make 81

The way I chose to draw these was that for a given number n, you determine which gnomon layer it lies in, how far along the gnomon layer it is, and what side of the gnomon it is on. The gnomon layer for n tells us where to start: we just need to count up to the layer along angle that is determined by k. If we know how far along in the layer it is, we know how many dots to move along before plotting our point. And finally, if we know which side it is on, we know how many turns to make along the way.

So for example, the formula for the y coordinate is this:

Applying the explanation above, you may get a sense of how it works:

Built into this there is a little more complexity: one method of finding out the gnomon layer we are in is to use a formula for computing polygonal numbers along with the quadratic formula (found in the polygonal number formula calculations section of the graph).

When I've written little programs to draw polygonal numbers before (like in the Fathom/Tinkerplots version), I relied heavily on conditional statements (if/else) and on iteration/recursion (use of the prev() function). It was a challenge for me to take something that relied on those sort of programming constructs and translate it into an extreme function-oriented environment like Desmos. It was revealing to see how conditionals became products of 'truth functions' (returning 0 or 1), and how iterations were replaced by sums.

Friday, October 28, 2016

doodling with Froebel

Maybe it is time to unplug, put that graphing calculator aside, lay out some graph paper, and pick up a pencil. But what to do? The tyranny of the blank page plagues not only writers, but doodlers as well.

A great source of inspiration for how to fill that graph paper are nineteenth century Froebelian kindergarten text books. Froebel proposed a curriculum based on manipulating and creating using basic forms, realized in the form of "gifts" that were provided to students at various stages of their learning. The gifts were blocks, sticks, squares of paper, drawing tablets and other objects that were used to build, weave, cut, fold, and draw combinations of basic forms. Some old textbooks include nice illustrations of how the gifts were used. For example, the seventh gift was "parquetry tablets," very much like the pattern blocks that are found in many classrooms. The illustrations for these provide some nice inspiration for what you can do when presented with a blank sheet of graph paper.

These illustrations, showing the richness of what can be done with the 45-90 triangle, are from The Kindergarten Guide: An Illustrated Hand-book, Designed for the Self-instruction of Kindergartners, Mothers, and Nurses (1877), by Maria Kraus-Boelte (on google books, here).

The similar set below are taken from The Paradise of Childhood: A Manual for Self-instruction in Friedrich Froebel's Educational Principles, and a Practical Guide to Kinder-gartners (1869), by Edward Wiebe (on google books here).

For example, starting with motif 72/232, I found one way to fill the page.

a pattern based on motif 72/232

Of course, it wasn't long before I felt compelled to re-create it using some dynamic geometry software (GSP):

As you get into the flow, a host of associations and observations may come to mind. One thing I noticed about this pattern was that the gaps look like something you would make from an origami windmill base (almost a pajarita or cocotte, a popular "European" origami model). Not all things that pop into your head at this point are legitimate observations, of course, and upon investigation I found that the gaps are not quite a proper pajarita:

the pajarita

But seeing origami birds flying around in that pattern seems appropriate: the eighteenth Froebelian gift was folding papers, which were used to explore patterns that could be obtained from the windmill base:

Some Froebelian forms from origami
windmill base (from 
Origami Spirit)

Back to doodling, I tried another variation using the same basic motif:

another pattern based 
on motif 72/232

Is it just a coincidence that the gaps in both patterns have the same area? Maybe, but there must be a minimal gap for any pattern based on this motif, perhaps three squares is what it is (more doodling required).

gaps in patterns based on 72/232 have the
same total area, maybe

I have to put this aside now, but you should get started. Here are a few more panels from The Paradise of Childhood that might inspire some grid paper doodles: