Веселитесь с географической проекцией 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, которая, вероятно, также решит мою проблему.
Любые идеи?
Кватернионы - хороший подход - спасибо за обмен! – patricksurry