197 Commits

Author SHA1 Message Date
Justin Kunimune
29fd0e3362 New AuthaGraph
I just made another map for output, because I felt like it and didn't want to wait until I finish working with the Map Explainer to re-commit.
2018-02-20 21:07:44 -06:00
Justin Kunimune
752c7ea861 Whereas the capital of Cambodia is...
I added labels to the political map and made it properly handle labels. That was the last major thing I wanted to do. Yay! I created a bunch of new vector maps and took the opportunity to freshen up my super-map. I also found and fixed a fatal bug in the raster map designer in that it was not loading parameters.
2018-02-19 21:29:47 -06:00
Justin Kunimune
aa9a27bc6d The new TetraPower
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.
2018-02-15 19:04:59 -10:00
Justin Kunimune
055ea75d8a Aaaaaand perfect!
I made a bunch of changes. All small ones. Together, they make my automatically-generated map a lot better. I'm finally ready to start post-processing and put these on Wikipedia!
2018-02-13 20:29:20 -10:00
Justin Kunimune
8092068515 We're gonna need a bigger atlas
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.
2018-02-13 11:57:15 -10:00
Justin Kunimune
7bcc659750 Finally! Edcent-looking maps!
I got the coastlines to correctly rebind to themselves when crossing a neatline. My projection code finally produces decent maps without post-processing! Now to fulfill my dream of replacing all the Tissot's Indicatrices images on Wikipedia!
2018-02-12 11:32:25 -10:00
Justin Kunimune
075ef87e99 To factor again
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.
2018-02-11 16:47:16 -10:00
Justin Kunimune
4c229f2111 Safe at last
I finished my thread-safing. Wow, threads are hard. I'm much more
confident in my code's ability to run without mysterious unreproducable
errors, now, though.
2018-02-11 16:31:42 -10:00
Justin Kunimune
aafb6e0401 Threads are dangerous!
I found the JavaFX concurrent package and have been using it to make my
code more thread-safe. In its current state, it doesn't actually display
the progress bar correctly or disable the buttons, and the threads still
read from input while it's changing, but I wanted to save my progress,
because this has been quite the struggle thus far.
2018-02-11 12:55:27 -10:00
Justin Kunimune
9ae6c2a668 Put the scissors down!
I (finally) made it automatically snip paths that are obviously crossing
interruptions. This should make vector maps look world better straight
out of the program, and will be crucial to mass-producing vector maps.
There's some room for improvement regarding the handling of closepaths,
but all in all, this is a big step up.

I also got a new input, fixed some minor issues with the new
Cahill-Keyes (did you know it's pronounced /kais/?), and might have
fixed the sporadic BufferOverflowExceptions, but I'm not sure about the
last one, as that problem is extremely difficult to reproduce, but I
have a strong suspicion it has something to do with threads, and I added
a bunch of Platform.runLater()s, so we'll see.
2018-02-09 22:43:58 -10:00
Justin Kunimune
027347071c The Cahill-Keyes projection
I detached Antarctica from the Cahill Keyes projection, making it much
more true to Keyes's (did you know it's pronounced /kais/?) intention. I
still use the simpler one by default, because this is a program for
creating oblique projections, and that one works much better for
obliquity.
2018-02-08 13:12:23 -10:00
Justin Kunimune
b1e76a71ee So many ways to unfold an octohedron
I did the inverse of the Bat projection. It took some finagling to get
the parallel cutoffs like I wanted them, but all in all, I think it
looks great. Onto Cahill-Keyes!
2018-02-08 10:30:08 -10:00
Justin Kunimune
cc6d7fcddf That's not how you integrate polynomials!
I was able to get the Bat projection working without too much trouble.
It turned out that while I got my MacLaurin series right for the
conformal mapping from the disc to a hexagon, my integral was wrong. I
fixed that, but I still needed to do tho oblique trick to make it look
good enough. All in all, it works great. Now I just need an inverse.
Newton-Raphson, anyone?
2018-02-07 21:01:00 -10:00
Justin Kunimune
c13f1a2608 BECAUSE IT'S A BAT PROJECTION!
I started working on that bat projection, but as it turns out, the 12th
order MacLaurin series isn't nearly precise enough. I'll have to break
it up farther. For now, though, here you go.
2018-02-06 21:27:10 -10:00
Justin Kunimune
b8dc4b78bd Tissot or not Tissot
I noticed some issues with my Tissot's Indicatrices images, and
corrected accordingly.
2018-02-06 16:42:26 -10:00
Justin Kunimune
28798c4cba Return of the Gene
I adapted Cahill-Keyes to my new octohedral framework. Now to start
creating more octohedral projections!
2018-02-06 16:15:31 -10:00
Justin Kunimune
9d85e98492 A Whole New WAAAAAAAAAAAAAAAterman!
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.
2018-02-05 22:57:37 -10:00
Justin Kunimune
b50e63d19d So... many... maps...
I decided to spruce up my input SVG generation code, and got very carried away. I moved some of the bigger or more specific files into an Advanced folder in input, and then I got the horrible idea to make a super detailed computer-generated map from Natural Earth data with labels for everything and fancy borders, and then I had to do it. It took a very long time. But it is complete. Check out Advanced\Supermap if you have a powerful enough computer.
I also reorganised my code a bit and took better advantage of shapefiles.
2018-02-04 23:12:52 -10:00
Justin Kunimune
5e01e339b9 Good documentation is its own reward
I tidied up the documentation on the BFGS stuff and updated my maps and
defaults to be informed by the new optimizations.
2018-01-31 13:22:22 -10:00
Justin Kunimune
b51f632cf5 IT WORKS!?!?
I have spent teh last week attempting to implement proper BFGS optimisation to replace my gradient descent. I have been encountering mysterious problem after mysterious problem, from random noise in my deterministic data to fake derivatives being better than real derivatives. But now it works. And I need to push this _right now_ before it breaks.
2018-01-29 21:05:56 -10:00
Justin Kunimune
76f0ce6f29 Last time on "Map-Projections"...
I forgot to push a couple of things. I just fixed the imports on MapPlotter and inserted real ellipsis glyphs and units on MapAnalyzer.
2018-01-29 21:02:55 -10:00
Justin Kunimune
00a3f2a25e Revert "Angles vs factors"
This reverts commit ed297dbd079f3cc1ce93cd3aeb2cd98a60be7351.
2018-01-24 19:05:50 -10:00
Justin Kunimune
ed297dbd07 Angles vs factors
I changed my shape distortion metric to be max angle displacement instead of stretch factor in decibels, hoping it would weigh moderate distortion higher and severe distortion lower. It didn't really do anything. I think I'll just set it back to how it was, because I liked it that way.
2018-01-24 18:48:18 -10:00
Justin Kunimune
3ff09d1ada Not bad, if I do say so myself
I finished the inverse of my new Equahedral map projection. Numerically,
it looks great, but to be completely honest, I'm dubious. I'm strongly
considering changing my average shape distortion function, because it's
giving a quite good score to Equahedral, even though Equahedral distorts
pretty much everything about the same amount, which I honestly think
should score it lower. It looks like it does shape better than Winkel
Tripel, which I just don't believe. So we'll see.
2018-01-24 13:42:58 -10:00
Justin Kunimune
dc2a9e3d36 Finally, my maps look decent.
I switched around Basic.svg and Landmasses.svg, because Basic.svg
honestly just looks bad. The graticule is fine when the landmasses are
filled, but in the map designer, the graticule totally distracts from
the actual coastlines, and it was driving me cra cray.
2018-01-24 11:21:19 -10:00
Justin Kunimune
d09d3db53c My best one yet
I've invented another map projection. Well, two, technically. They are
both equal-area tetrahedrals of the same form. I scrapped the old
Equahedral and replaced it with projections having interruptions more
like Cahill's sinuses than the arbitrary holes I put in the other one.
This drastically reduces the maximum distortion and conforms better to
the sphere, without taking up too much more area. I couldn't decide
exactly how to format the meridians (they needed a joint somewhere, but
where?), so I did it two ways so I could compare them. I'll get rid of
the one that I don't like as much, which seems to be "fold". That one is
a little bit more mathematically elegant, but just distorts the vertexal
regions more.
2018-01-24 11:19:47 -10:00
Justin Kunimune
823fb3c562 You remembered!
It remembers the last directory you saved/loaded and sends you there
automatically the next time you must specify a filepath.
2018-01-22 18:42:43 -10:00
Justin Kunimune
b836d63649 Finally, a map that doesn't lie!
I implemented the one, true map projection, reverse-engineered from
spherical data. We can never be sure if this is the exact algorithm
required to convert the continents back to their natural, planar form,
but it looks pretty good to me. Perhaps with this correct map projection
in hand, we can banish the lies the government has been feeding us all
our lives. Stay flat, comrades.

Oh, I also fixed a bug in Mollweide.
2018-01-22 18:15:23 -10:00
Justin Kunimune
69c61be027 You've heard of FaceMash. Get ready for MapMash!
I added a rating system! All maps have a rating 0-4, now. Since this
rating is completely subjective, I doubt I'll put it into the main
program. I haven't actually decided what to do with it yet, but I like
having it. The criteria I used were fairly straightforward:

0 - Terrible. Do not use. There are objectively better alternatives. I
hate it.
1 - Bad. Could be worse, but using this projection reflects a lack of
thought or understanding.
2 - Okay. I can't fault anyone for using it. It's not the best, but it
is fine. Good for at least some situations.
3 - Good. People who use this know what's up.
4 - Fantastic. One of the best. There can only be four.

These ratings reflect how the projection is most often used, not
necessarily how it ought to be used.

I also now measure average distortion in Decibels, because I like the
zeroth order of magnitude better than the negative first order of
magnitude.
2018-01-22 11:58:52 -10:00
Justin Kunimune
d6eb4ddcbf Don't push that button!
I improved my button handling so that the proper buttons grey out
whenever things are happening. I ended up taking a page from JavaFX's
book and having a map from an enum to stored buttons. I also made the
plot saving thing work, since that seems to have broken at some point,
and improved some documentation.
2018-01-22 09:27:51 -10:00
Justin Kunimune
a9b5978b9c What projection even is this?
I fixed a bug relating to the display of obscure map projection titles
that seems to have cropped up with Java 9 and finally made conformal
conic behave a little bit better when it degenerates to Mercator.
2018-01-21 21:18:55 -10:00
Justin Kunimune
9f820aba78 A perfect fit
I made it so that saved SVG files have their dimensions changed to fit
the new map projection shape. I know I said that I already did that, but
this time it actually works. I also instilled a couple of checks to
prevent my projections from going to infinity or NaN.
2018-01-21 19:42:07 -10:00
Justin Kunimune
63bb238c38 Episode IX
I upgraded to Java 9. To be completely honest, I thought more would
change and am slightly disappointed. I did make use of that new Map.of()
method, which was a lot of fun. The upgrade also sized up my app, I
guess to account for the high-resolution nature of my screen. Also the
reformatting size thing doesn't actually work.
2018-01-21 12:53:52 -10:00
Justin Kunimune
9eb0b785c0 That's no Equirectangular projection!
I added some functionality such that when it saves new SVG, it edits the
Metadata and dimensions to properly reflect the new projection. It
doesn't quite work yet, though. There's some new syntax that I want to
use for this...
2018-01-21 10:31:06 -10:00
Justin Kunimune
fb6a6f970d Fine! Select the headers! See if I care!
I changed up the projection selection dialog a bit to have what I think
is slightly more intuitive behaviour.
2018-01-20 21:59:32 -10:00
Justin Kunimune
15089ee166 We should take the error and push it somewhere else!
I drastically reduced the error in distortion calculations of some of my map projections by strategically slightly shifting my sampling points around so that they are far less likely to hit seams. I don't like it as a solution, but it works way better than the other thing I tried that was supposed to automatically detect seams.
I also changed MapAnalyzer to have more bins for the histograms, so that each bin matches to one contour level.
2018-01-20 21:33:52 -10:00
Justin Kunimune
fd87346a95 Minor touch-ups
I noticed some things that bothered me about my GUI, which I adjusted.
2018-01-20 17:41:00 -10:00
Justin Kunimune
9dfc72f4b8 Exacto
I got the equations perfect. The Dymaxion projection is complete. And by far my slowest projection.
2018-01-20 17:40:32 -10:00
Justin Kunimune
2687fea6a4 Don't be fooled by its good looks
I started on my Dymaxion implementation. I got the aspect and the layout down, after quite a bit of trial and error. I altered the Polyhedral code to suit an icosahedral mesh. Now I just need the face projection. Honestly, though, the approximation to the face projection that I'm using now is really good. Like, I can't visually tell the difference. But it's not done until its exact.
2018-01-19 22:38:35 -10:00
Justin Kunimune
5ef9f5eed5 So many faces!
I cleaned up my Polyhedral code substantially in preparation for Dymaxion. It was kind of a mess. I moved a bunch of periodicity code out of the projections themselves and into the Configurations, made the Configurations more efficient and correct (particularly the OOB stuff), and fixed a big hole in my obliquifySphc that was manifesting in a nasty way in my Lee. I also scoured Lee's paper and finally got the exact (well, to nine sig figs) value of the size of the triangle. I also made Lee slightly faster, though I have yet to look into that "Knuth" algorithm Snyder was talking about. Also, as it turns out, Lee has reverted to reporting an average shape distortion of 0.011, so I'll have to look into that at some point. I think it's a tetrahedral thing.
2018-01-19 11:30:55 -10:00
Justin Kunimune
bf2f829991 Can't stop won't stop
I tweaked the inverse projection for Cahill-Keyes to extend beyond the
international dateline to complete Russia without my needing to manually
cut that peninsula out.
2018-01-18 20:14:45 -10:00
Justin Kunimune
4825c12b2b What's it take to get a good map around here?
I created a new Waterman projection for Wikipedia and in the process changed a few things to make the resulting image better. Aren't real applications to reveal shortcomings in one's product the best?
2018-01-18 15:17:35 -10:00
Justin Kunimune
55f8d4aae1 Well, here you go
I finished Waterman. It actually compares fairly well with Cahill-Keyes, being not as good at shape preservation but actually slightly better with area. Wow, though, those equatorial regions were killer!
2018-01-18 14:40:29 -10:00
Justin Kunimune
d5a792cdb7 Got a dead lawn but to lazy to do anything?
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.
2018-01-18 10:56:39 -10:00
Justin Kunimune
f8dcf34d94 All credit goes to me
I finished my input images. Everything is complete and ready to be used in my program. Tissot-alt1.svg looks more like the one on Wikipedia I'm trying to replace, Tissot.svg looks more like that, Landmasses.svg has an updated, better-looking black-on-white color scheme, Political.svg has cleaner and more editable css, Political.png has been changed to a nicer size, Tissot.png is now consistent with Tissot.svg, Graticule.svg is finer and has tropics and arctic circles labeled, and Orthodromes looks a lot nicer depite being functionally the same.
2018-01-17 20:47:06 -10:00
Justin Kunimune
d753fec73f I don't need you, Crates, whoever you are!
I found out that some of my svg landmass strings got corrupted to oddly-shaped landmasses at some unknown point in time. I also found out that the sources that I cited for said images were completely wrong. So I decided to cut ties and just make all of my own svg inputs from scratch. I used the data from Natural Earth, which I can now access with my improved coding skill (the last time I tried to use Natural Earth, I couldn't figure out how to open their shapefiles, which is why I turned to SVG in the first place). I expanded my zupplementary Python scripts in preparation to redo all of them from my new source. Except Political.svg. That's made by the same person who does Natural Earth using the same data, and is already a great image.
So I cleared out my old SVGs, updated the README to use real sources, and added some notes to myself in the Java files.
2018-01-17 15:45:16 -10:00
Justin Kunimune
05758dd23a Why can't I stop making maps?
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.
2018-01-15 13:21:46 -10:00
Justin Kunimune
b7cf4345fd I make maps with _direction_ and MAGNITUDE
I added a few more vector inputs that I've been wanting for some time. My Tissot one I actually don't love, but it is based heavily on Eric Gaba's Tissot maps that are all over Wikipedia that I want to replace because they lack indicatrices in the most important locations: the poles and the prime meridian. After I fix Wikipedia, I might make a new one without a graticule and with more indicatrices.
I also made my program slightly better at loading new SVG maps and fixed Landmasses to not have a weird broken Antarctica.
2018-01-14 14:27:35 -10:00
Justin Kunimune
78be3bb2f8
Good documentation is Keye
I slightly enhanced my CahillKeyes documentation.
2018-01-13 20:11:20 -10:00
Justin Kunimune
c83c71bc23 In its original form
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.
2018-01-13 17:17:03 -10:00