TL;DR

Where I start looking into the SVG path bounding box… starting simple.

For the simple case of a segment, we can go directly to the code:

 1 sub segment_bb ($P0,$P1) {
2    my %r = (min => {}, max => {});
3    for my $d (qw< x y >) { 4 my ($p0, $p1) = ($P0->{$d},$P1->{$d}); 5 ($r{min}{$d},$r{max}{$d}) = ($p0 < $p1) ? ($p0, $p1) : ($p1, $p0); 6 } 7 return \%r; 8 }  Although simple, this sets the stage also for future posts on more complicated stuff. The function expects to receive the two endpoints of the segments,$\mathbf{P}_0$and$\mathbf{P}_1\$. They are represented as anonymous hashes that have a x and a y key - probably not the most efficient of representations… but whatever.

The algorithm is straightforward: for each of the two axes, we take the corresponding values from the input points and assign them to the minimum and the maximum. This results in a bounding box with the shape of an anonymous hash with two keys (min and max), each represented as a point with x and y.

And that’s it for this!