d3 / d3-geo-polygon

Clipping and geometric operations for spherical polygons.
https://d3.observablehq.cloud/d3-geo-polygon/
Other
113 stars 23 forks source link

Imago projection #24

Closed Fil closed 5 years ago

Fil commented 5 years ago

Refs:

imago

waldyrious commented 5 years ago

Are these artifacts expected?

screenshot 2019-02-28 at 10 53 35

Update: the lines do seem to bend one way or the other as k moves below or above ~0.68, so perhaps that's why the AuthaGraph projection settled on that value.

Fil commented 5 years ago

I noticed that too. They are not here with k=0.68 but quite visible with k=0.59.

waldyrious commented 5 years ago

Yeah, those seem to be the bisectors of the tetrahedron's sides.

Here's the initial image from @jkunimune15's post:

undistorted map

Here's an crudely annotated Imago projection, with k=0.4 to emphasize the artifacts: annotated map

Note how the inflections all match the triangle bisectors marked in red.

I suspect the original AuthaGraph projection was optimized so that the lines crossing those boundaries get curved to be perpendicular to them at the intersection points. Not sure if that can be directly translated to a specific (or even better, mathematically derived) k value, or if they used another strategy (which might explain the small differences between the Imago and the original AuthaGraph).

Fil commented 5 years ago

Ha, very interesting observation! Then probably we should compute that exact value, and mention it in the documentation.

MarcinCiura commented 5 years ago

FWIW, I had a similar problem in pseudo-Authagraph, but on the edges of the tetrahedron rather than on the bisectors of its faces. Without my (imperfect) smoothing, the projection was continuous but not differentiable at the joints between its parts. A possible solution is to replace the power function f(r) = r^p by another function with the following properties:

MarcinCiura commented 5 years ago

Here is a sample function that satisfies the conditions (EDIT: fixed):

Fil commented 5 years ago

@mciura if you want to add your function in src/imago.js : clone this repo, and checkout the imago branch. Then run:

I have added an orientation map at https://observablehq.com/@fil/imago-projection-distorsion-analysis#ORIENTATION

k = 0.7: image

k = 0.59: image

MarcinCiura commented 5 years ago

@Fil Thank you for the instructions. I have tried a couple of functions different from the power function, with abysmal results. One conclusion is that keeping the lines of latitude above Antarctica nicely rounded depends on the values of the function in the entire [0, 1] interval.

jkunimune commented 5 years ago

I've done some math, and assuming I've done this right, the value of k that prevents kinks seems to in fact be equation or about 0.720.

Fil commented 5 years ago

The projection has been released with d3-geo-polygon 1.7.0.

The last mind-boggling question is to find the other rotations: one that allows to cut in the Bering Strait, and one that puts Antarctica on the left of the map.

Fil commented 4 years ago

And here is the first (I believe…) book to carry the Imago projection!

Photo le 13-05-2020 à 14 14

Photo le 13-05-2020 à 14 17

This projection was a perfect fit for the story arc: as you can read it from left to right to follow the action ("Peopling the planet"), main axis of movement, and direction of time.