Kevin Ryde > Math-PlanePath-113 > Math::PlanePath::AlternatePaperMidpoint

Math-PlanePath-113.tar.gz

Dependencies

Annotate this POD

Website

# CPAN RT

 Open 2
View/Report Bugs
Module Version: 113   Source   Latest Release: Math-PlanePath-114

# NAME

Math::PlanePath::AlternatePaperMidpoint -- alternate paper folding midpoints

# SYNOPSIS

``` use Math::PlanePath::AlternatePaperMidpoint;
my \$path = Math::PlanePath::AlternatePaperMidpoint->new;
my (\$x, \$y) = \$path->n_to_xy (123);```

# DESCRIPTION

This is the midpoints of each alternate paper folding curve (Math::PlanePath::AlternatePaper).

```     8  |                        64-65-...
|                         |
7  |                        63
|                         |
6  |                  20-21 62
|                   |  |  |
5  |                  19 22 61-60-59
|                   |  |        |
4  |            16-17-18 23 56-57-58
|             |        |  |
3  |            15 26-25-24 55 50-49-48-47
|             |  |        |  |        |
2  |       4--5 14 27-28-29 54 51 36-37 46
|       |  |  |        |  |  |  |  |  |
1  |       3  6 13-12-11 30 53-52 35 38 45-44-43
|       |  |        |  |        |  |        |
Y=0 | 0--1--2  7--8--9-10 31-32-33-34 39-40-41-42
+----------------------------------------------
X=0  1  2  3  4  5  6  7  8  9 10 11 12 13 14```

The `AlternatePaper` curve begins as follows and the midpoints are numbered from 0,

```                      |
9
|
--8--
|     |
7     |
|     |
--2-- --6--
|     |     |
1     3     5
|     |     |
*--0--       --4--```

These midpoints are on fractions X=0.5,Y=0, X=1,Y=0.5, etc. For this `AlternatePaperMidpoint` they're turned 45 degrees and mirrored so the 0,1,2 upward diagonal becomes horizontal along the X axis, and the 2,3,4 downward diagonal becomes a vertical at X=2, extending to X=2,Y=2 at N=4.

The midpoints are distinct X,Y positions because the alternate paper curve traverses each edge only once.

The curve is self-similar in 2^level sections due to its unfolding. This can be seen in the midpoints as for example N=0 to N=16 above is the same shape as N=16 to N=32, but the latter rotated +90 degrees and numbered in reverse.

## Arms

The midpoints fill an eighth of the plane and eight copies can mesh together perfectly when mirrored and rotated by 90, 180 and 270 degrees. The `arms` parameter can choose 1 to 8 curve arms successively advancing.

For example `arms => 8` begins as follows. N=0,8,16,24,etc is the first arm, the same as the plain curve above. N=1,9,17,25 is the second, N=2,10,18,26 the third, etc.

```                      90-82 81-89                       7
arms => 8          |  |  |  |
... 74 73 ...                      6
|  |
66 65                          5
|  |
43-35 42-50-58 57-49-41                    4
|  |  |              |
91-..    51 27 34-26-18 17-25-33                    3
|        |  |        |  |
83-75-67-59 19-11--3 10  9 32-40                    2
|  |  |  |
84-76-68-60 20-12--4  2  1 24 48    ..-88           1
|        |  |              |  |        |
92-..    52 28  5  6  0--8-16 56-64-72-80      <- Y=0
|  |  |  |
44-36 13 14  7-15-23 63-71-79-87          -1
|  |        |  |        |
37-29-21 22-30-38 31 55    ..-95          -2
|              |  |  |
45-53-61 62-54-46 39-47                   -3
|  |
69 70                               -4
|  |
... 77 78 ...                           -5
|  |  |  |
93-85 86-94                            -6

^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^
-7 -6 -5 -4 -3 -2 -1 X=0 1  2  3  4  5  6```

With eight arms like this every X,Y point is visited exactly once, because the 8-arm `AlternatePaper` traverses every edge exactly once ("Arms" in Math::PlanePath::AlternatePaper).

The arm numbering doesn't correspond to the `AlternatePaper`, due to the rotate and reflect of the first arm. It ends up arms 0 and 1 of the `AlternatePaper` corresponding to arms 7 and 0 of the midpoints here, those two being a pair going horizontally corresponding to a pair in the `AlternatePaper` going diagonally into a quadrant.

# FUNCTIONS

See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.

`\$path = Math::PlanePath::AlternatePaperMidpoint->new ()`

Create and return a new path object.

`(\$x,\$y) = \$path->n_to_xy (\$n)`

Return the X,Y coordinates of point number `\$n` on the path. Points begin at 0 and if `\$n < 0` then the return is an empty list.

Fractional positions give an X,Y position along a straight line between the integer positions.

`\$n = \$path->n_start()`

Return 0, the first N in the path.

http://user42.tuxfamily.org/math-planepath/index.html