2

Веселитесь с географической проекцией D3, чтобы построить интерактивный глобус, основанный на всех замечательных примерах, которые я нашел.Составить два вращения в геометрии D3?

Вы можете увидеть мой простой макет в http://bl.ocks.org/patricksurry/5721459

Я хочу, чтобы пользователю манипулировать земной шар, как трекбол (http://www.opengl.org/wiki/Trackball). Я начал с одного из примеров Майка (http://mbostock.github.io/d3/talk/20111018/azimuthal.html) и немного улучшил использование координат холста и выразил местоположение мыши в «координатах трекбола» (т. Е. Вращение вокруг горизонтальных и вертикальных осей холста), так что фиксированное движение мыши дает больше поворота вблизи краев земного шара (и работает за пределами земного шара, если вы используете описанное выше гипербелевое расширение), а не одно: одно соответствие.

Это хорошо работает, когда земной шар начинается в невращающемся положении (северный полюс вертикальный), но когда земной шар уже повернут (манипулируйте примером, так что северный полюс обращен к странице) интуитивно понятным, потому что вы не можете просто выразить изменение координат трекбола как дельта в координатах d3.geo.rotate lat/lon. 3-осевое вращение D3 включает в себя применение долготного вращения (вращение вокруг северного полюса), затем вращение широты (вращение вокруг горизонтальной оси в плоскости холста), а затем поворот «рыскания» (вращение вокруг оси, перпендикулярной плоскости) - см. http://bl.ocks.org/mbostock/4282586.

Я предполагаю, что мне нужен метод для составления моих двух матриц вращения (тот, который в настоящее время находится в проекции, с новым, чтобы слегка вращать трэкбол), но я не вижу способа сделать это в D3 , кроме копания в источнике (https://github.com/mbostock/d3/blob/master/src/geo/rotation.js) и попытки сделать математику для определения матрицы вращения. Код выглядит элегантно, но без комментариев, и я не уверен, что могу правильно расшифровать закрытие экземпляром орфографической проекции.

В последнем случае, если кто-то знает форму матрицы вращения d3.geo.projection, которая, вероятно, также решит мою проблему.

Любые идеи?

ответ

1

Существует альтернативное решение patricksurry отвечают, используя кватернионные представления, а вдохновленный Jason Davies. Я тоже думал, что D3 уже поддержал бы эту композицию изначально! И надеялся, что Джейсон Дэвис опубликовал свой код ...

Принял время, чтобы выяснить математику. Здесь загружается демо с попыткой объяснить математику.http://bl.ocks.org/ivyywang/7c94cb5a3accd9913263

С моим ограниченным математическим знанием, я думаю, одним из преимуществ кватерниона над Эйлером является способность объединять несколько оборотов снова и снова, не беспокоясь о ссылках на координаты. Так что это всегда будет работать, независимо от того, где стоит ваш северный полюс, и независимо от того, сколько оборотов у вас будет. (Кто-то, пожалуйста, поправьте меня, если я ошибаюсь).

+0

Кватернионы - хороший подход - спасибо за обмен! – patricksurry

1

Я решил, что решение для комбинированной матрицы вращения может быть не таким сложным. Я получил http://sagemath.org, чтобы выполнить большую часть тяжелой работы, чтобы я мог выразить композицию исходной ориентации вращения вращения() и поворот трекбола как один эквивалентный поворот().

Это дает гораздо более естественное поведение независимо от ориентации земного шара.

Я обновил макет так, что он имеет улучшенную версию - см http://bl.ocks.org/patricksurry/5721459

Источники в http://bl.ocks.org/patricksurry/5721459, которые включают в себя объяснение математики - здорово, что вы можете использовать соответствующие греческие буквы в JavaScript почти читаемой математика исходного кода !

Было бы еще хорошо, если D3 поддерживается состав циклического сдвига операций изначально (или, может быть, он еще ?!)

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

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