2017-02-18 10 views
1

Я хотел бы добавить «летящие» (3D) дуги к своей орфографической проекции, как показано на рисунке here, но с отсечением вместо эффекта затухания. Это кажется трудным, поскольку дуги создаются независимо от проекции. (Каждая дуга определяется тремя точками, полученными из проекции - серединой начала, конца и большой окружности, протянутой вдоль линии от центра холста, - но сама дуга рисуется с использованием «2D» кардинальной интерполяции на соответствующей точки на холсте svg.)Обрезные непроекционные элементы (орфографические)

Моя первая мысль заключалась в том, что мне может понадобиться сделать какую-то сферическую геометрию, чтобы получить координаты, где происходит обрезка, но теперь мне интересно, есть ли более простой способ выполнить это (I новый для D3).

Это то, что выглядит как моя карта без отсечения:

enter image description here

ответ

0

Я также очень зеленый на d3, но, к счастью, я также свежий из собственного поиска приличного решения для отсечения рейс линии в орфографии. Демонстрационное связывание умно в более чем один:

  1. дуга рисуется из трех точек интерполированных с Catmull-Rom curve в проецируется 2D координата что происходит визуально приблизить истинную круговую кривой в 3D красиво
  2. линия исчезает с близостью либо из его точек на плоскости отсечения, как вы указали

Рисование сплайна в проектируемой, 2D координаты исключает любую возможность разделить строку перед проекции и получить визуальное гладкость для дешевых, даже если d3 имела t его функциональность изначально (которую я так и не смог найти). Это означает, что интерполяция должна быть намного более ручной.

Моя первая мысль была, что я, возможно, потребуется сделать некоторые сферическую геометрию, чтобы получить координаты, где отсечение происходит, но теперь мне интересно, если есть более простой способ сделать это

I в конце концов поселился с тем, что я считаю наиболее очевидный вариант, который, к сожалению, вы прицеливания точно избежать:

  1. получить координаты точки отсечения по поперечному произведению текущего глобуса центра с нормалью к большому кругу план е дуги. Учитывая ваше происхождение и назначение Po и Pd соответственно и глобус центр C, вы ищете C x (Po x Pd) нормированного
  2. Interpolate координату между отправлением и назначением, используя что-то вроде d3.geoInterpolate
  3. Project интерполированного точку справа scale (читайте : высота) над землей для этой доли линии полета
  4. Нарисуйте одну [сглаженную] линию от начала координат до точки отсечения вдоль интерполированных точек между ними, а другую от точки отсечения до пункта назначения, перемещая ее соответственно фон. Смотрите случаи, когда вся линия находится впереди или позади плоскости отсечения.

Чтобы выяснить, где на траектории полета вам нужно сращивать точку пересечения, вам, вероятно, потребуется сравнить большие углы точки отсечения от одного конца до конца. Обратите также внимание на то, что производительность поражает, но вы можете быть удовлетворены количеством линий полета, которые вы нарисовали в своем примере.

 Смежные вопросы

  • Нет связанных вопросов^_^