キャンバス上の星空。 星座

前の記事で始まったテーマの継続。 その開発のアイデアは、Habr「 LibCanvas:On the Way to the Stars 」に関する記事を読むことでした。これは 、測地座標系(観測点、方位角、および地平線上の高さの座標)での星座と惑星の派生によるCanvasでのプラネタリウムの実装を説明しています。 投稿で、著者は私が親切に使用した星と星座のデータベースへのリンクを提供します。 ファイルには、星、星座ポイント、およびそれらの名前の赤経(赤経、時間単位)と赤緯(度単位、赤緯)の座標が含まれています。 それらをラジアンに変換し、スタープロジェクトStarry Skyの constellations.jsファイルに保存しました。



星空





違い



結果を比較すると、元のプラネタリウムでは、すべてが逆に見えることに気付きました。 つまり、星は球の外側に、私にとっては内側に引き寄せられます。 参考として別のプラネタリウムを使用することにしました。 この目的のために、Maps @ Mail.ruで「スター」プロジェクトを選択しました。 正しい表示オプションが星の球の内側にあることが判明しました。 これは図で見ることができます(2014年2月3日17時2:0、観測点-d 37、w 55モスクワ)。



プラネタリウムデフ



新機能



私のStarry Skyプラネタリウムの星座に加えて、星、惑星、宇宙船のポイント(活動領域)の上にホバーするときの情報の出力を追加しました。

星の場合、ヘンリードレーパーのカタログ(HD)の数字が表示されます。



星や惑星に加えて、GLONASSグループの宇宙船の天体暦と軌道がマップに追加されます。 データはcelestrak.comから取得され、 tledata.jsファイルに保存されました。 グループには合計28個のデバイスがあり、デバイスの選択はサテライトリストによって制御されます。satellite-jsモジュールは、宇宙船の軌道と位置を計算するために使用されます。



地図の縮尺の変化は、地球の表面上の高さの変化に結びついています。 それ以外の場合は画像のリアリズムが失われ、天球のエッジのコードはマップのエッジよりも小さくなるため、恒星球のサイズは固定されています。 理想的には、星や惑星の除去と接近により、セレスティアのような無限の宇宙の効果を作り出したいと思います。



レイヤーの個別のリストを使用して、レイヤー(オブジェクトのグループ)を有効または無効にできるようになりました...







結果



著者が書いているように、 astrokot.ruのプラネタリウムの主な問題は、プログラムの遅さです。 Firefox 19プロファイラーで時間を測定しました(プラネタリウムでは1168ミリ秒、星空では525ミリ秒)。 本当に遅く、Starryにはより多くのオブジェクトがあり、時間は2倍短くなります。 明らかに、サイクルは出力を遅くする追加の計算を使用します。



私のプロジェクトの優れたアルゴリズムを調査し、計算とコードをできるだけ単純化して、それらが明確で視覚的になるようにします。 他のプロジェクト(Celestia、Stellarium、libastro)のコード、特にWebGLのコードを研究する場合、どの式が使用され、どのように機能するかを理解することは非常に困難です。 私にとっては、これまでのところ、コードが理解可能で、たとえばJSなどの他の環境への移植に最適なlibnovaとMarbleの2つのプロジェクトを特定しました。



All Articles