45 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
Justin Kunimune
35538a029c What do you call a rapidly flashing map projection?
A Strebe projection!

I implemented the Strebe 1995 projection, and Eckert IV, since it was a prerequisite. What a weird map!
I also reorganised my other maps by adding more specific geometry types, putting the full list in alphabetical order, and standardising every instance of Newton-Raphson approximation to actually call NumericalAnalysis.newtonRaphsonApproximation().
2018-01-11 21:14:11 -10:00
Justin Kunimune
cae7a8a64c I knew Keyes was good, but... wow.
I can't express in text how impressed I am by Gene Keyes. Perhaps that's
unnecessary. Perhaps it's just the interruption that's making it look so
good. But either way, wow! It's such a good projection. I didn't want to
pass judgement until I had gotten a complete MapAnalyzer color plot, in
case my eyes deceived me. The results are in, and this is a magnificent
map, second only to Lemons (I found out the real word for those is
"Gores", but I'm going to keep using "Lemons"). Cahill-Keyes is complete
and ready for production!
2018-01-10 19:22:18 -10:00
Justin Kunimune
fc20d5071a Some next-level stuff
I made a better approximation of Cahill-Keyes. It's getting there; be
patient.
2018-01-10 17:47:09 -10:00
Justin Kunimune
7d84f4a1a3 Seyek-Llihac
I started on the inverse of Cahill-Keyes. I just have the arrangement
done for now; I'll do the specific projection equations next.
2018-01-09 21:15:35 -10:00
Justin Kunimune
cfa31402a4 Meridians and parallels intertwined like wild vines
I added a graticule to raster maps! This took quite a while to complete, and it still has major issues. Namely, those annoying horizontal lines where it crosses from one side of the map to the other. I've contemplated several methods for dealing with that, and I'm starting to like an intelligent system that knows where the interruptions are and breaks lines that cross it. I don't have the details worked out. This also took a while, so I might take a break from that and finally get around to doing the inverse projection for Cahill-Keyes.
2018-01-09 17:02:49 -10:00
Justin Kunimune
8c9f2cbbac Get cut out of the picture
I added an option to remove the unnecessary stuff on the side of the map. It makes some pretty cool looking stuff. Not as good stuff, in my opinion, since it implies that the world has hard edges, but it works real well for the map analyser, where it prevents the distorted margins from distracting from the less distorted part that actually matters.
2018-01-04 21:03:42 -10:00
Justin Kunimune
da163a45bc All of the projections!
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!
2018-01-02 11:04:40 -10:00
Justin Kunimune
910ec37911 Ready for Release
I fixed up some things, changing Tetrahedral aspect preset to not slice
up Antarctica as much and Longest Line to have Australia at the top
again (I just like it better that way. I'm not sure why I ever did it
differently.). Then I rebuilt it. Fun fact: JDK 9 doesn't work. I had to
go back and find JDK 8 to make it actually compile.
I also revised my ReadMe to reflect a few changes and made some new
images. It's a wild time.
2017-11-26 11:46:43 -05:00
Justin Kunimune
66ae877df2 The secrets of the AuthaGraph uncovered!
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.
2017-11-23 23:03:36 -05:00
Justin Kunimune
223342cd16 Notation matters
I changed all the descriptions to end with periods. I also fixed a minor bug with conic projections not properly degenerating to cylindricals and made the MapAnalyzer display nicer things (it really isn't that slow. Maybe my computer is just faster now.).
2017-11-21 17:39:29 -05:00
Justin Kunimune
cd99cd716c Better than Atlantis
I added a new aspect, roughly based on the "Atlantis Projection", which is an oblicque Mollweide projection, except that I recently discovered that that one is transverse, not completely oblique. What is it with this aversion the world has to oblique projections? Anyway, I came up with a slightly better one in a similar location.
2017-10-04 17:10:59 -04:00
Justin Kunimune
66b27d03ec Say something I'm breaking up on you
I made drawn lines break when they get too long again, and I fixed some
issues with Pierce Quincuncial and Guyou. Speaking of which, I removed
Guyou from my active projection list. It used to be my favourite
projection, but now that I've found Lee, it's just obsolete. Pierce
Quincuncial is a bit obsolete in light of that too, but at least that
one is somewhat known; I don't need it as well as Guyou.
I was also fooling around with Lee and found a way better aspect for
tetrahedral maps. I have no idea how I missed it before.
2017-08-26 11:00:45 -10:00
Justin Kunimune
40201f6f46 Parsing, for real this time
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.
2017-08-25 21:06:56 -10:00
Justin Kunimune
3df41f52db Do you know who I am?!
I added the forward solution to the Lemons projection, which is
currently a bit wrong, but I'm going to replace it with a Cassini type
thing in a bit, anyway.
I also spiffed up the comments and changed how Antipode works slightly.
2017-08-20 11:48:37 -10:00
Justin Kunimune
43dada1252 A new perspective
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.
2017-08-19 16:43:02 -10:00
Justin Kunimune
ea02e8a2ef Code writing code
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.
2017-08-18 15:08:59 -10:00
Justin Kunimune
076dcc5bc9 Merge branch 'master' of https://github.com/jkunimune15/Map-Projections 2017-08-14 23:53:05 -04:00
Justin Kunimune
dcf5fa98c1 It was mostly crazy.
So, representing projcetions as classes was kind of a horrible idea and
also impossible. That's okay. I still implemented two of the things I
wanted to implement: storing projections as variables such that I can
distribute them among several (like, fifteen), and a formal system
 for a long time ive had to poop
 i think i should get that looked at
 hahahahahahaha just kidding i love being constapated
for processing parameters. Al6so, Wink7el Tripel is tot9ally broe5kn. i
9think it mig3ht be an 7issue with N5ewton Raph9son Appro1ximation. I'll
look i6nto that l8r.
2017-08-14 14:26:54 -04:00
jkunimune
5515a36c63 The Mecca Projection (jk not rely)
I changed somewhat how parameters and aspects are treated, particularly
for the retroazimuthal and two-point equidistant projections, which
shouldn't really have aspects. Instead they now have parameters for
those latitudes and longitudes they use, and the aspect selector
disappears when they are selected.
I also moved around a few listeners, cleaned up my code by removing all
explicit EventHandler declarations, and reimplemented the thing where
dragging the sliders in Vector mode instantly changes the map, since
that's apparently not throwing an error anymore.
And in case you were wondering (though I don't know who would read this
besides me), the title references the fact that the "Mecca Projection"
is technically the quasicylindrical retroazimuthal projection, not the
quasiazimuthal one, but my Hammer Retroazimuthal centers on Mecca by
default now, so it's more or less a Mecca projection.
2017-08-05 18:56:44 -04:00
jkunimune
e33abf2933 I'm Ant-Man!
I learned (sort of) how to use Ant and did a bunch of fun build stuff.
Now I have a script to update the .jar files for me and a bunch of real
executables, with installers and icons and everything! I also finally
just got rid of the wormhole thing; it's just completely different from
the rest of this repository and does not belong here. It's fine; I've
got it in the history.
2017-07-22 22:28:00 -04:00
jkunimune
aa5e8fe5ad It's the final conic! DODODO DOOOO DANANA NA NAAAAAAAA
I implemented the final stages of the conformal conic. It is now alway
centered and always fills the image. I also found and fixed a bug where
the user could change the parameters as the map was being calculated. As
predicted, the code for Lambert conic now looks just as ugly as ED Conic
and Albers, but that's okay, because I never have to touch them again.
Woo!
2017-07-22 14:30:22 -04:00
jkunimune
8c60d261aa Just call me the Master of Cone
I've got the equidistant conic and Albers down. Now all I have to do is
make Lambert's conformal conic lose its whitespace. I'm so close!
As with equidistant conic, the code for Albers looks completely hideous.
I figured I would just go ahead and continue the theme. There's a
non-negligible chance Lambert CC will soon become uglier, as well. Thank
goodness for Eclipse's ability to hide blocks of code.
2017-07-20 22:33:20 -04:00
jkunimune
f7877569d2 Threads are evil
I implemented some smarter threading so that error messages block the
main window and the map isn't calculated three times when you choose an
aspect. There was apparently also a critical problem that caused the
vector designer to crash one out of every however many thousand times,
which I fixed with a call to Platform.runLater.
Oh, and I did equidistant conic projections! That probably should have
been the title. I've got this super robust method of dealing with all
the different shapes it can have, which looks utterly hideous but works
amazingly.
In addition to that, I composed my "Map wishlist", which does not at all
describe what it is, but I like the word "wishlist" so whatever. I just
added all the maps I want to have eventually with TODO tags on them.
Once I have all of those, I will consider this part of the code done and
move on to refining all of my analysis tools and generating HTML.
2017-07-19 22:18:16 -04:00
Justin Kunimune
ab155f2c9e The Complete Set
I made inverse solutions for all my invented projections, and even threw
in a new one, "Tetrachamfer", which kind of sucks, but I felt like I
should include it for completeness's sake.  I found a bug in
MapConfigurationDialog and squashed it, as well. And I added a couple
new maps to the output folder. Oh, I never explained what the problem
with Tobler was! There was an issue with the way Z was being generated,
so last commit, I cleaned that up and may have made it slightly slower,
but I don't really care given how well it works now and how much faster
it still is than Lee (seriously, what is the deal with that?). Did I do
anything else? Not really. Next step: conic projections!
2017-07-15 16:51:38 -04:00
Justin Kunimune
8f9af45190 Everything is broken
I got the labels to move around when you resize the graph, and changed
up my distortion metrics slightly. I was, like, yeah. This is good. Now
I can optimize my Tobler projection. And then I found out that the map
optimizer was assigning Tobler size distortions of .4! I'm just so
confused. So that's completely broken. I suppose once I figure this out,
it might help to explain why Tetrapower is so bad.
2017-07-10 09:29:45 -04:00
jkunimune
a08d57d0d4 It's _still_ not precise enough!
I spent a buttload of time working on the Tobler projection. It is now
unbearably slow and still has an average distortion of, like .04. It's
okay, though. I've got a plan to fix both of those problems. It involves
ordinary differential equations and inheritance. Nyeh heh heh heh heh!
2017-07-08 19:12:15 -04:00
jkunimune
eaeaee9a5e Strength in unity
All map-based Applications have been changed to make use of
MapApplication. Yay. I also fixed equal-area cylindrical to be real. Now
if only Tobler and the conic maps were real.
2017-07-04 09:11:37 -04:00
jkunimune
9590f6e3a8 I don't care if it's the Survivor's bathrobe!
I added more inheritance. When I think of the word "inheritance", the
first thing that comes to mind is the above quote. It's from one of the
broadsheet articles in The Bands of Mourning. Actually, most of what I
did in this commit had to do with parametrization, not inheritance. Oh,
well. It's a good quote.
Maps can have parameters now. Woo. It's an opportunity that Equal-Area
Cylindrical (very simple), my made-up map projections (not that hard a
leap), and Winkel Tripel (surprisingly difficult) currently take
advantage of. I still need to make the conic projections be
parametrized, and Tobler once I can make it be real. I also still need
to make MapAnalyzer take advantage of this newfound inheritance.
2017-07-02 22:57:02 -04:00
jkunimune
e9e9721598 Whew!
That was... a lot. I decided to put some inheritance into the project,
and what a rabbit hole that turned out to be!
Huh. I think that may be the first time I've ever actually used an
"exclamatory statement". What a useless structure that is!
Anyway, both MapDesigners now inherit from the same abstract super
class. Eventually, I'll get MapAnalyzer to link to that, too. I also
changed a whole lot of other things, and started inserting parametric
map capacities. That should be a fun GUI thing to figure out. I also
changed a lot of other things that I can't remember off the top of my
head. I've just been dragging chunks of code around and swimming in
errors for the past week.
2017-07-01 20:55:46 -04:00