1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#!/usr/bin/perl -w
# Copyright 2011, 2012, 2013, 2014, 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/>.
# Usage: perl pythagorean-tree.pl
#
# Print tree diagrams used in the Math::PlanePath::PythagoreanTree docs.
#
use 5.010;
use strict;
use Math::PlanePath::PythagoreanTree;
foreach my $tree_type ('UAD','UArD','FB','UMT') {
my $str = <<"HERE";
tree_type => "$tree_type" coordinates A,B
______________ 001 _____________
/ | \\
00002 00003 00004
/ | \\ / | \\ / | \\
0005 00006 00007 00008 00009 00010 00011 00012 00013
HERE
my $path = Math::PlanePath::PythagoreanTree->new(tree_type => $tree_type,
coordinates => 'AB');
$str =~ s{(\d+)}
{
my ($x,$y) = $path->n_to_xy($1);
my $fieldlen = length($1);
sprintf '%-*s', $fieldlen, "$x,$y";
}ge;
print $str;
}
# Previous horizontal across.
#
# my $str = <<"HERE";
# tree_type => "$tree_type"
#
# +-> 00005
# +-> 00002 --+-> 00006
# | +-> 00007
# |
# | +-> 00008
# 001 --+-> 00003 --+-> 00009
# | +-> 00010
# |
# | +-> 00011
# +-> 00004 --+-> 00012
# +-> 00013
#
# HERE
|