1Math::PlanePath::CubicBUasseer(3C)ontributed Perl DocumeMnattaht:i:oPnlanePath::CubicBase(3)
2
3
4
6 Math::PlanePath::CubicBase -- replications in three directions
7
9 use Math::PlanePath::CubicBase;
10 my $path = Math::PlanePath::CubicBase->new (radix => 4);
11 my ($x, $y) = $path->n_to_xy (123);
12
14 This is a pattern of replications in three directions 0, 120 and 240
15 degrees.
16
17 18 19 26 27 5
18 16 17 24 25 4
19 22 23 30 31 3
20 20 21 28 29 2
21 50 51 58 59 2 3 10 11 1
22 48 49 56 57 0 1 8 9 <- Y=0
23 54 55 62 63 6 7 14 15 -1
24 52 53 60 61 4 5 12 13 -2
25 34 35 42 43 -3
26 32 33 40 41 -4
27 38 39 46 47 -5
28 36 37 44 45 -6
29
30 ^
31 -11-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6
32
33 The points are on a triangular grid by using every second integer X,Y,
34 as per "Triangular Lattice" in Math::PlanePath. All points on that
35 triangular grid are visited.
36
37 The initial N=0,N=1 is replicated at +120 degrees. Then that trapezoid
38 at +240 degrees
39
40 +-----------+ +-----------+
41 \ 2 3 \ \ 2 3 \
42 +-----------+ \ \
43 \ 0 1 \ \ 0 1 \
44 +-----------+ --------- -----------+
45 \ 6 7 \
46 replicate +120deg \ \ rep +240deg
47 \ 4 5 \
48 +----------+
49
50 Then that bow-tie N=0to7 is replicated at 0 degrees again. Each
51 replication is 1/3 of the circle around, 0, 120, 240 degrees repeating.
52 The relative layout within a replication is unchanged.
53
54 -----------------------
55 \ 18 19 26 27 \
56 \ \
57 \ 16 17 24 25 \
58 ---------- ----------
59 \ 22 23 30 31 \
60 \ \
61 \ 20 21 28 29 \
62 --------- ------------ +----------- -----------
63 \ 50 51 58 59 \ 2 3 \ 10 11 \
64 \ +-----------+ \
65 \ 48 49 56 57 \ 0 1 \ 8 9 \
66 ---------- --------- +----------- ---------+
67 \ 54 55 62 63 \ 6 7 \ 14 15 \
68 \ \ \ \
69 \ 52 53 60 61 \ 4 5 \ 12 13 \
70 -------------- +----------+------------
71 \ 34 35 42 43 \
72 \ \
73 \ 32 33 40 41 \
74 ---------+ -----------
75 \ 38 39 46 47 \
76 \ \
77 \ 36 37 44 45 \
78 -----------------------
79
80 The radial distance doubles on every second replication, so N=1 and N=2
81 are at 1 unit from the origin, then N=4 and N=8 at 2 units, then N=16
82 and N=32 at 4 units. N=64 is not shown but is then at 8 units away
83 (X=8,Y=0).
84
85 This is similar to the "ImaginaryBase", but where that path repeats in
86 4 directions based on i=squareroot(-1), here it's 3 directions based on
87 w=cuberoot(1) = -1/2+i*sqrt(3)/2.
88
89 Radix
90 The "radix" parameter controls the "r" used to break N into X,Y. For
91 example radix 4 gives 4x4 blocks, with r-1 replications of the
92 preceding level at each stage.
93
94 3 radix => 4 12 13 14 15
95 2 8 9 10 11
96 1 4 5 6 7
97 Y=0 -> 0 1 2 3
98 -1 28 29 30 31
99 -2 24 25 26 27
100 -3 20 21 22 23
101 -4 16 17 18 19
102 -5 44 45 46 47
103 ... 40 41 42 43
104 36 37 38 39
105 32 33 34 35
106 60 61 62 63
107 56 57 58 59
108 52 53 54 55
109 48 49 50 51
110
111 ^
112 -15-14-13-12-11-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6
113
114 Notice the parts always replicate away from the origin, so the block
115 N=16 to N=31 is near the origin at X=-4, then N=32,48,64 are further
116 away.
117
118 In this layout the replications still mesh together perfectly and all
119 points on the triangular grid are visited.
120
122 See "FUNCTIONS" in Math::PlanePath for behaviour common to all path
123 classes.
124
125 "$path = Math::PlanePath::CubicBase->new ()"
126 "$path = Math::PlanePath::CubicBase->new (radix => $r)"
127 Create and return a new path object.
128
129 "($x,$y) = $path->n_to_xy ($n)"
130 Return the X,Y coordinates of point number $n on the path. Points
131 begin at 0 and if "$n < 0" then the return is an empty list.
132
133 Level Methods
134 "($n_lo, $n_hi) = $path->level_to_n_range($level)"
135 Return "(0, $radix**$level - 1)".
136
138 Math::PlanePath, Math::PlanePath::ImaginaryBase,
139 Math::PlanePath::ImaginaryHalf
140
142 <http://user42.tuxfamily.org/math-planepath/index.html>
143
145 Copyright 2012, 2013, 2014, 2015, 2016, 2017, 2018 Kevin Ryde
146
147 This file is part of Math-PlanePath.
148
149 Math-PlanePath is free software; you can redistribute it and/or modify
150 it under the terms of the GNU General Public License as published by
151 the Free Software Foundation; either version 3, or (at your option) any
152 later version.
153
154 Math-PlanePath is distributed in the hope that it will be useful, but
155 WITHOUT ANY WARRANTY; without even the implied warranty of
156 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
157 General Public License for more details.
158
159 You should have received a copy of the GNU General Public License along
160 with Math-PlanePath. If not, see <http://www.gnu.org/licenses/>.
161
162
163
164perl v5.32.0 2020-07-28 Math::PlanePath::CubicBase(3)