本文へ移動

Wakusei Planets惑星

太陽・惑星・衛星を、線画、陰影つきの絵、表面の地図で描きます。実際の大きさ・傾き・自転つきで、任意の日時の衛星の位置も分かります。

「惑星」(わくせい) は、太陽のまわりを回る大きな星のことです。 名前について(英語)

目次

やり方

ズームと移動

パッケージのどの表示も、ドラッグ、ピンチ、ホイール、キーでズームも移動もできます。ページに操作部品は要りません。要素ごとのズームの範囲と、その理由、手を外す方法、共通のバーを足す方法も説明します。

<wakusei-body>、<wakusei-portrait>、<wakusei-space> は、共通の kazoku-ui の操作部品を自分で持っています。ページにタグを置くだけで、読む人は操作できます。<kazoku-view-controls> も、つなぎの記述も要りません。

<wakusei-body body="jupiter" look="realistic" size="420"></wakusei-body>

読む人ができること

  • ドラッグ。 全体が見えている状態 (Fit) では、ドラッグで天体が回ります (ポートレートでは絵が動きます)。拡大しているときは、ドラッグで見ている場所が動きます。ポインターの下の表面は、ポインターについてきます。
  • ピンチ。 2本の指で、拡大・移動・ひねりができます。
  • ホイール。 Fit のときは、ふつうのホイールはページをスクロールします。絵に閉じ込められることはありません。Ctrl、Command、Alt を押しながらのホイールは、ポインターのところを中心に拡大します。拡大しているときは、ふつうのホイールで見ている場所が動きます。
  • キー。 要素にフォーカスすると (tabindex="0" がつきます)、矢印で回り、+ と - で拡大・縮小、0 か Home で Fit に戻ります。ダブルタップで2倍と元の大きさを行き来します。
  • スマホ。 Fit のときの touch-action は pan-y なので、指でページをスクロールできます。拡大すると none になります。

ズームの範囲

ズームしても、描くピクセルは増えません。キャンバスの大きさは決まっていて (1辺4096ピクセル、600万ピクセルまで)、ズームは描いたものを拡大するだけです。だから下限は自由に決められて、上限は絵の細かさが足りなくなるところです。

要素範囲理由
<wakusei-body> 線画0.1倍〜50倍下限は、天体全体を小さく見る余裕のためです。線画はベクター (SVG) なので、どんな大きさでも細かさがあります。50倍で縞やクレーターのふちが大きく見えます。
<wakusei-body> realistic と painted0.1倍〜8倍いちばん細かい地図は天体を一周して2048ピクセルです。ふつうの大きさの絵で、Fit の約1.5倍までくっきり見え、それ以上はやわらかくなります。シェーダーの細かさ (縞、クレーター、輪のふち) で8倍まで見られますが、8倍では地図がぼやけ、見えるのは陰影です。もっと細かい地図のタイルは別の作業です。
<wakusei-portrait>0.1倍〜8倍同じ地図を、一つの絵の中で使います。線画のポートレートはもっと拡大できますが、絵柄を切り替えても同じになるように、範囲をそろえています。
<wakusei-space>100万分の1倍〜3倍下限は、カメラを海王星より外まで引くためです (本当の縮尺では、惑星は点になります)。上限は、カメラが天体に着くところです。カメラは表面から1.05半径より近づかない (距離は 3.4 / ズーム 半径) ので、ズームが約3.2を超えても何も動きません。2048ピクセルの地図が見られる範囲で、いちばん近いのが3倍です。

自分の範囲は、タグの zoom-min と zoom-max で決めます (zoom-min は1以下、zoom-max は zoom-min 以上に抑えるので、Fit はいつも範囲の中です)。

<wakusei-body body="mars" look="realistic" zoom-max="4"></wakusei-body>

手を外す、バーを足す

controls="none" で、手を外します。live="off" の天体 (サムネイルや静止画) は、手なしで始まります。値なしの controls で戻ります。

ボタンがほしいページは、バーを足します。バーがあるあいだは、バーが手を引き継ぎます。バーのイベントは、これまでどおり setView に渡します。バーは要素のズームの範囲を読むので、範囲はタグに一度書けば足ります。

<wakusei-body id="planet" body="saturn" look="line" tabindex="0"></wakusei-body>
<kazoku-view-controls for="planet" address controls="advanced" speed="0"></kazoku-view-controls>

for には、まわりの箱ではなく要素そのものを指定します。そうしないと、要素の手とバーの手の両方がドラッグを受けてしまいます。キーを使うには、要素に tabindex が必要です。

ページへの知らせ

手でも setView でも、表示が変わるたびに、要素から wakusei-view が送られます。中身は yaw、tilt、roll、zoom、panX、panY です (ポートレートは zoom、panX、panY、宇宙ビューは yaw、tilt、zoom)。宇宙ビューの controller は共通のコントローラーで、space.controller.set({ zoom: space.zoomFor("moon") }) と書くと、その距離に移れます。

埋め込みページとビルダー

embed.html は、ドラッグ、ピンチ、Ctrl とホイール、キー、+ と - のボタンでズームでき、表示を自分のアドレスに書き込みます (幅が240ピクセルより小さいフレームには、ボタンを置く場所がないので、ボタンとアドレスはなく、手だけが働きます)。?body=saturn&look=realistic&zoom=2 は2倍で開きます。表示の傾きは vtilt です (tilt はポーズの傾きに使っているためです)。コードビルダーは、絵のズームを追いかけ、ズームしたあとに書き出す iframe のコードに zoom= がつきます。要素のコードにはつきません。タグはいつも Fit から始まるためです。

ソースを見るGitHub で編集@johnmorrisdotca/wakusei-planets 0.24.0 のソースから作成しました。

この日本語は、まだ日本語を母語とする方の確認を受けていません。訂正を歓迎します。