Структурная геология — очень наглядная тема, если не сказать больше.
Чтобы помочь геологам визуализировать различную ориентацию плоскостей, создание и понимание сетевых диаграмм Шмидта имеет основополагающее значение.
Чтобы помочь мне изучить и сэкономить время при воссоздании сетей Шмидта, я создал простой инструмент визуализации 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, и сохранить ее на каком-то бэкэнде.