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, 2019, 2020 Kevin
146 Ryde
147
148 This file is part of Math-PlanePath.
149
150 Math-PlanePath is free software; you can redistribute it and/or modify
151 it under the terms of the GNU General Public License as published by
152 the Free Software Foundation; either version 3, or (at your option) any
153 later version.
154
155 Math-PlanePath is distributed in the hope that it will be useful, but
156 WITHOUT ANY WARRANTY; without even the implied warranty of
157 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
158 General Public License for more details.
159
160 You should have received a copy of the GNU General Public License along
161 with Math-PlanePath. If not, see <http://www.gnu.org/licenses/>.
162
163
164
165perl v5.38.0 2023-07-20 Math::PlanePath::CubicBase(3)