根据我找到的所有优秀示例,玩 D3 地理正交投影来构建交互式地球仪。
你可以在http://bl.ocks.org/patricksurry/5721459看到我的简单模型
我希望用户像轨迹球一样操纵地球(http://www.opengl.org/wiki/Trackball)。我从 Mike 的一个示例(http://mbostock.github.io/d3/talk/20111018/azimuthal.html)开始,并稍微改进以使用画布坐标并以“轨迹球坐标”表示鼠标位置(即绕画布水平和垂直轴),以便固定的鼠标移动在地球边缘附近提供更多旋转(如果您使用上面解释的双曲线扩展,则可以在地球之外工作),而不是迈克的一对一对应。
当地球开始于未旋转的位置(北极垂直)时,它工作得很好,但是当地球已经旋转(操纵示例使北极面向页面外)时,轨迹球控件变得不直观,因为你可以不要简单地将轨迹球坐标的变化表示为 d3.geo.rotate 纬度/经度坐标中的增量。D3 的 3 轴旋转包括应用经度旋转(围绕北极旋转),然后是纬度旋转(围绕画布平面中的水平轴旋转),然后是“偏航”旋转(围绕垂直于平面的轴旋转) - 见http://bl.ocks.org/mbostock/4282586。
我想我需要的是一种组合我的两个旋转矩阵的方法(当前在投影中的一个,用一个新的来稍微旋转轨迹球),但是除了挖掘之外,我在 D3 中看不到这样做的方法进入源代码(https://github.com/mbostock/d3/blob/master/src/geo/rotation.js)并尝试进行数学运算来定义旋转矩阵。代码看起来很优雅但没有注释,我不确定我是否可以正确地用正交投影实例破译闭包。
最后一点,如果有人知道 d3.geo.projection 的旋转矩阵形式,那也可能解决我的问题。
有任何想法吗?