Структурная геология — очень наглядная тема, если не сказать больше.

Чтобы помочь геологам визуализировать различную ориентацию плоскостей, создание и понимание сетевых диаграмм Шмидта имеет основополагающее значение.

Чтобы помочь мне изучить и сэкономить время при воссоздании сетей Шмидта, я создал простой инструмент визуализации D3.js на CodePen, который помогает мне строить простые плоскости.

На самом деле я не видел такой простой визуализации, кроме svgnet arijitlaik, которая не использует сетки для проекции.

Внутреннее устройство на самом деле довольно простое. Теоретически, я просто использовал встроенные проекции geoAzimuthalEqualArea и ограничил их масштаб до размеров сети Шмидта.

var graticule = d3.geoGraticule()
 .extent([[-90,-90],[90.1,90]]) //.1 to force 90E line draw
 .step([2,2])
 .precision([1]);

10-градусная сетка широта/долгота и сама красная плоскость — это просто еще 2 пути сетки, перекрывающие и трансформируемые сверху.

var graticuleInput = d3.geoGraticule()
 .extent([[90-dip_angle,-90],[90-dip_extent,90]])
 .step([1])
 .precision([1]);

Где степень падения - это просто заполнитель на 1 градус:

var dip_angle = 45,
 dip_extent = dip_angle — 1,

При рендеринге ввод преобразуется в соответствии с масштабированием всей проекции и поворачивается на угол наклона минус 90 градусов.

svg.append(“path”)
 .datum(graticuleInput)
 .attr(“class”, “graticule_input_plane”)
 .attr(“transform”, “translate(“ + width/3 + “,” + height/3 + “) rotate(“+dip_direction +”)”)
 .attr(“d”, path);

В целом быстрый и грязный взлом, но он работает. В будущем я мог бы сделать какую-то CRUD-подобную реализацию, такую ​​​​как arijitlaik, и сохранить ее на каком-то бэкэнде.