---
name: "Math::PlanePath::QuadricCurve"
section: "3pm"
platform: "linux"
package: "libmath-planepath-perl"
version: "129-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Math::PlanePath::QuadricCurve"
---

# Math::PlanePath::QuadricCurve(3pm)

## 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/\>.
