私が見つけたすべての素晴らしい例に基づいて、インタラクティブな地球を構築するために D3 地理正投影を楽しんでいます。
私のシンプルなモックアップはhttp://bl.ocks.org/patricksurry/5721459で見ることができます
ユーザーが地球儀をトラックボールのように操作できるようにしたい ( http://www.opengl.org/wiki/Trackball )。Mike の例の 1 つ ( http://mbostock.github.io/d3/talk/20111018/azimuthal.html ) から始めて、キャンバス座標を使用し、マウスの位置を「トラックボール座標」で表現するように少し改善しました (つまり、回転これにより、Mike の 1 対 1 の対応ではなく、固定されたマウスの動きが地球の端近くでより多くの回転を与えます (上記で説明した双曲線拡張を使用すると、地球の外側で機能します)。
地球が回転していない位置 (北極が垂直) から始まる場合はうまく機能しますが、地球が既に回転している場合 (北極がページの外を向くように例を操作します)、トラックボール コントロールは非直感的になります。単にトラックボール座標の変化を d3.geo.rotate lat/lon 座標のデルタとして表現するだけではありません。D3 の 3 軸回転には、経度回転 (北極を中心に回転)、緯度回転 (キャンバス平面の水平軸を中心に回転)、「ヨー」回転 (平面に垂直な軸を中心に回転) の適用が含まれます。 - http://bl.ocks.org/mbostock/4282586を参照してください。
私が必要としているのは、2 つの回転行列 (現在投影されているものと、トラックボールをわずかに回転させるための新しい行列) を構成する方法だと思いますが、掘る以外に D3 でそれを行う方法がわかりません。ソース ( https://github.com/mbostock/d3/blob/master/src/geo/rotation.js ) に入力し、回転行列を定義するために計算を試みます。コードは洗練されているように見えますが、コメントはありません。正射投影インスタンスでクロージャを正しく解読できるかどうかはわかりません。
最後の点で、誰かが d3.geo.projection の回転行列形式を知っていれば、おそらく私の問題も解決します。
何か案は?