I fixed up and ran the MapExplainer, to update the website. I added more maps to it and made it handle threads properly. I also updated the MapPlotter to have that neat Bat Map, and fixed minor issues with Polyhedral and Octohedral.
I renamed AuthaPower to TetraPower, as it is a somewhat more descriptive name, and removed the old TetraPower, as it didn't add much to TetraGraph. I also made my SVGs more compatible, enhanced my graticules, and fixed a bug with Behrmann.
I wrote a script that automatically generates standard axis maps, which I will now put on Wikipedia. There are some issues on which I am currently working, but this is great for the most part. I also revamped my organisation and documentation slightly.
My utils package was getting pretty big, and some of them were pretty
specific, so I moved some of them to a helper package specifically for
working with imagery.
I've used that reference before, haven't I?
In any case, I have successfully transfered Waterman to a new Octohedral
class that is far more generalisable than the last one. I now intend to
start moving Cahill-Keyes, and coding in Cahill-Rus, Cahill-Concialdi,
and the detachment of Antarctica. The end goal: more and better
octohedral maps in my collection.
Hire a Water Man!
Get it? Waterman?
I implemented the Waterman projection. Well, mostly. The raster part doesn't actually work for what would correspond to Gene Keyes's "equatorial supple zone". The math got too complicated, so I want to push what I have. It also doesn't detatch Antarctica, but I probably just won't do that; I think it detracts from the value of the map.
I renamed Tetrahedral to Polyhedral in the process, because I had originally intended to use that framework before I decided Waterman needed its own class. I still might put Dymaxion in Polyhedral.
I also fixed a bug with Cahill-Keyes that was cutting off the top and bottom and removed the Butterfly variant of Cahill-Keyes.
Last week, I thought Cahill-Keyes would be my final map projection. Now
I have that, two new pseudocylindricals, and the beginnings of a
Dymaxion derivation in my notebook. I just can't stop! Anyway, I threw
in Natural Earth, because I like Tom Patterson's work (as you may know,
two of my input rasters were made by him), and Karvayaganirsksyviyh the
twelfth, because of that one reference in XKCD and its slightly
persuasive Wikipedia page. Neither was too hard to implement, though I
did make Robinson share a class with the very similar Natural Earth.
I also redid Tissot like I said I would. I relegated the other one to
the side to be used by scripts only. I just like a lot more indicatrices
on my map than Eric Gaba. I need to update Tissot.png to have colors
consistent with Tissot.svg, but I'll do that later. I was going to do
that today before I got distracted finding out all of my Antarcticas
were wrong.
I changed up a few map projections to look more like they did when they were first published. I added a triangular version of Lee, I changed AuthaGraph to have the aspect built in, and I fixed all of the ones without aspects to actually not have aspects (there was a bug there that I fixed).
I also cleaned up SVGMap a bit to try to make it work better with this great Tissot's indicatrices image I found, but the image was too messy, and I couldn't make it work.
I added a nifty projection selection dialog so that the user now has
access to every projection I have programmed, while the combobox list is
now shorter. It was more difficult than I anticipated, but it works and
looks great!
I've finished Cahill-Keyes! It took a lot of reading, a lot of geometry,
and a lot of if statements. But now it's perfect. Now all I need is an
inverse projection.
I implemented a first pass at octohedral map projections. I have
isolated the complicated projection part to a method I have yet to
write, but I've found a great resource at Gene Keyes's website that goes
into much detail on how exactly to produce the Cahill-Keyes projectios.
I would have gone with Waterman, since it's marginally more popular, but
this one is way better documented, and it's newer so presumably better.
I threw in a butterfly and "M" arrangement.
I inverted a new projection to fill my "Equahedral" slot. It's what I
had before as "ActuAuthaGraph", but it cuts out the singularities, much
like Tetrachamfer. It works well for Albers, so I figured it would here,
as well. And I was right! With a minimal amount of interruption (it's
not even interruption, in a strictly technical sense), I have created an
authagraphic projection that is far better than any other I've seen. It
even has those nice little holes I like for inserting tiny orthographic
projections.
I also learned that Tetrahedral Projections produce some serious error
in my average distortion metrics. Maybe it's because of the
discontinuity; I'm not sure. I might look into it later, but for now,
I've mostly fixed the problem by lowering the threshold for "outlier" in
my size distortion metric from exp(25) to exp(15). As it turns out,
Tetrahedral projections are now way better than I though they were. This
threshold change somehow threw my Tobler off, so I had to up its
precision by a factor of two. That one's still lightning-fast, though.
It is technically O(1), after all.
Also, given how good EquaHedral is, I've deleted Hyperellipower,
TetraChamfer, and TetraFillet, and removed TetraGraph from most apps.
EquaHedral is just so good! And the AuthaPower generalisation I made for
AuthaGraph just fulfills all of my compromise needs! Tetrahedrons are
the future!
I've successfully reverse-engineered the AuthaGraph! My version is not
perfect, but it's pretty darn close. Those fools at AuthaGraph Inc.
thought their secrets were safe from me. How wrong they were!
Also included is an authagraphic version of AuthaGraph and a
parametrised version.
As it turns out, they are quite pointy. And creating an authagraphic
tetrahedral projection that has to shove landmasses into the pointy
corners doesn't work very well. Oh, well. I did some fun calculus to
make it work. I don't know how AuthaGraph does it. Probably by not being
authagraphic and lying to its followers. I'll probably make something
interrupted now.
I tweaked MapExplainer to be a little bit better, corrected some minor issues with the Projection metadata, added real descriptions to my custom parameterised projections, and fixed a critical bug with WinkelTripel's inverse solution.
I implemented more advanced SVG parsing and manipulation. It's somewhat
slower now, I think because I changed the way it skips vertices to save
time, but it was necessary to enable slightly more advanced SVG reading
(which I have yet to test). All the projections work, though. I also
changed my coordinate system. I also broke the bit where it does not
draw long lines.
I added the perspective projection, a generalized form of the
orthographic and stereographic projections. I also added those contour
lines to shape distortion in a correct way. It looks a little ugly on
simple projections, but really cool on the more abstract ones.
I made a program to automatically generate HTML snippets to fill the
projection page in my GH-Pages branch. It also automatically produces
nice pictures to go with it. I also threw in a nifty new transverse
feature, primarily for azimuthal maps. And I now represent properties
and types as enums. And I fixed a bug in 2 point equidistant. And fixed
some unicode issues.