Provided by: libmath-planepath-perl_129-1_all bug

NAME

       Math::PlanePath::QuadricCurve -- eight segment zig-zag

SYNOPSIS

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

DESCRIPTION

       This is a self-similar zig-zag of eight segments,

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

       The base figure is the initial N=0 to N=8,

                 2---3
                 |   |
             0---1   4   7---8
                     |   |
                     5---6

       It then repeats, turned to follow edge directions, so N=8 to N=16 is the same shape going
       upwards, then N=16 to N=24 across, N=24 to N=32 downwards, etc.

       The result is the base at ever greater scale extending to the right and with wiggly lines
       making up the segments.  The wiggles don't overlap.

       The name "QuadricCurve" here is a slight mistake.  Mandelbrot ("Fractal Geometry of
       Nature" 1982 page 50) calls any islands initiated from a square "quadric", only one of
       which is with sides by this eight segment expansion.  This curve expansion also appears
       (unnamed) in Mandelbrot's "How Long is the Coast of Britain", 1967.

   Level Ranges
       A given replication extends to

           Nlevel = 8^level
           X = 4^level
           Y = 0

           Ymax = 4^0 + 4^1 + ... + 4^level   # 11...11 in base 4
                = (4^(level+1) - 1) / 3
           Ymin = - Ymax

   Turn
       The sequence of turns made by the curve is straightforward.  In the base 8 (octal)
       representation of N, the lowest non-zero digit gives the turn

          low digit   turn (degrees)
          ---------   --------------
             1            +90  L
             2            -90  R
             3            -90  R
             4              0
             5            +90  L
             6            +90  L
             7            -90  R

       When the least significant digit is non-zero it determines the turn, to make the base N=0
       to N=8 shape.  When the low digit is zero it's instead the next level up, the
       N=0,8,16,24,etc shape which is in control, applying a turn for the subsequent base part.
       So for example at N=16 = 20 octal 20 is a turn -90 degrees.

FUNCTIONS

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

       "$path = Math::PlanePath::QuadricCurve->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.

   Level Methods
       "($n_lo, $n_hi) = $path->level_to_n_range($level)"
           Return "(0, 8**$level)".

OEIS

       Entries in Sloane's Online Encyclopedia of Integer Sequences related to this path include

           <http://oeis.org/A133851> (etc)

           A332246   X coordinate
           A332247   Y coordinate
           A133851   Y at N=2^k, being successive powers 2^j at k=1mod4

SEE ALSO

       Math::PlanePath, Math::PlanePath::QuadricIslands, Math::PlanePath::KochCurve

       Math::Fractal::Curve -- its examples/generator4.pl is this curve

HOME PAGE

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

LICENSE

       Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Kevin Ryde

       This file is part of Math-PlanePath.

       Math-PlanePath is free software; you can redistribute it and/or modify it under the terms
       of the GNU General Public License as published by the Free Software Foundation; either
       version 3, or (at your option) any later version.

       Math-PlanePath is distributed in the hope that it will be useful, but WITHOUT ANY
       WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
       PURPOSE.  See the GNU General Public License for more details.

       You should have received a copy of the GNU General Public License along with Math-
       PlanePath.  If not, see <http://www.gnu.org/licenses/>.