科学技術館Cプロジェクト

Similar documents
ToDo: 今回のタイトル

ExcelVBA

Microsoft Word - VBA基礎(6).docx

医用工学概論  Medical Engineering (ME)   3年前期の医用工学概論実習と 合わせ、 医療の現場で使用されている 医用機器を正しく安全に使用するために必要な医用工学(ME)の 基礎知識を習得する。

初めてのプログラミング

計算機シミュレーション

第 4 週コンボリューションその 2, 正弦波による分解 教科書 p. 16~ 目標コンボリューションの演習. 正弦波による信号の分解の考え方の理解. 正弦波の複素表現を学ぶ. 演習問題 問 1. 以下の図にならって,1 と 2 の δ 関数を図示せよ δ (t) 2

PowerPoint プレゼンテーション

ポインタ変数

JavaプログラミングⅠ

ガイダンス

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^

マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL:

Microsoft PowerPoint - chap10_OOP.ppt

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

3Dプリンタ用CADソフト Autodesk Meshmixer入門編[日本語版]

プログラミング実習I

理工学図書館後期 LS 講習会 きれいなグラフを作ろう! gnuplot 入門

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

クイックスタートガイドデスクトップバージョン GeoGebra とは? ひとつの使いやすいパッケージになった, 動的数学ソフトウェアです すべての教育段階における学習や指導に使用できます 二次元および三次元の幾何 (geometry), 代数 (algebra), 表計算, グラフ, 解析, そして

Microsoft Word - 03基準点成果表

コードテンプレートフレームワーク 機能ガイド 基礎編

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

数量的アプローチ 年 6 月 11 日 イントロダクション データ分析をマスターする 12 のレッスン ウェブサポートページ ( 有斐閣 ) 水落研究室 R http:

C#の基本

6 シート見出しブックに入っている各シート名の名前が表示されます シートとは 表を作るための作業エリア 単にシートという場合はワークシートのことを指します シート上のセルにデータを入力しながら表を作っていきます シートには他にグラフシートもあります 7 数式バー現在操作の対象となっているセル内のデー

情報システム設計論II ユーザインタフェース(1)

スライド 0

PowerPoint Presentation

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

< 目次 > 1. 練習ファイルのダウンロード 表計算ソフト Excel の基本 Excel でできること Excel の画面 セル 行 列の選択 セルにデータを入力する ( 半角英数字の場合 )

Microsoft Word - 18環設演付録0508.doc

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

目 次 1. はじめに 動作システム 起動方法 本ツールの機能 計算方法 使用方法 緯度 経度への換算 平面直角座標への変換 一度に計算可能なデータ数と追加方法

ワープロソフトウェア

DVIOUT

Microsoft PowerPoint - prog03.ppt

初めてのプログラミング

Microsoft Word - 206MSAccess2010

断面の諸量

Prog1_2nd

プログラミング基礎

Microsoft Word - no103.docx

CG

正誤表(FPT1004)

スライド 1

コンピュータグラフィックス基礎              No

4 正しい位置を持った 数値地図 25000( 空間データ基盤 ) の上に カラー空中写真 が読み込まれます この状態では カラー空中写真画像 は位置のデータを持っていないので 正しい位置に読み込まれていません ここから 画像位置合せ の作業を行います 地図画像は色調を変えることができます 薄くする

Microsoft Word - VBA基礎(2).docx

Microsoft Word _VBAProg1.docx

次の病院 薬局欄は 氏名 欄に入力された値によって入力すべき値が変わります 太郎の行く病院と花子の行く病院が必ずしも同じではないからです このような違いを 設定 シートで定義しておきましょう 太郎の行く病院のリストを 太郎 花子の行く病院のリストを 花子 として 2 つのリストが定義されています こ

Javaプログラムの実行手順

PowerPoint プレゼンテーション

クエリの作成が楽になるUDF

Microsoft Word - gnuplot

pp2018-pp9base

ワープロソフトウェア

p tn tn したがって, 点 の 座標は p p tn tn tn また, 直線 l と直線 p の交点 の 座標は p p tn p tn よって, 点 の座標 (, ) は p p, tn tn と表され p 4p p 4p 4p tn tn tn より, 点 は放物線 4 p 上を動くこと

Microsoft Word - VBA基礎(3).docx

Microsoft Office Excel2007(NO4中級後編 エクセルを実務で活用)

ポインタ変数

受信機時計誤差項の が残ったままであるが これをも消去するのが 重位相差である. 重位相差ある時刻に 衛星 から送られてくる搬送波位相データを 台の受信機 でそれぞれ測定する このとき各受信機で測定された衛星 からの搬送波位相データを Φ Φ とし 同様に衛星 からの搬送波位相データを Φ Φ とす

C言語講座 ~ファイル入出力編~

セル G5 に 大手町店 の合計を求めましょう 暮らしのパソコンいろは 1 セル G5 をクリックします 2 ホーム タブをクリックします 3 編集 グループの ( 合計 ) をクリックします セル G5 と数式バーに =SUM(D5:F5) と表示され セル範囲 D5:F5 が点滅する線で囲まれま

Microsoft PowerPoint P演習 第10回 関数.ppt [互換モード]

win版8日目

GrADS の使い方 GrADS(Grid Analysis and Display System) は おもに 客観解析データのような格子点データを地図上に作図するために使われるアプリケーションです 全球スケールの気象を扱う分野で広く使われています GrADS は Unix 系の OS 上でよく利

PowerPoint Presentation

Microsoft PowerPoint - slide

sinfI2005_VBA.doc

MS-ExcelVBA 基礎 (Visual Basic for Application)

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft Word - P doc

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

PowerPoint プレゼンテーション

Microsoft Word - no11.docx

Fortran 勉強会 第 5 回 辻野智紀

Microsoft Word - 1B2011.doc

マウス操作だけで本格プログラミングを - 世界のナベアツをコンピュータで - プログラムというと普通は英語みたいな言葉で作ることになりますが 今回はマウスの操作だけで作ってみます Baltie, SGP System 操作説明ビデオなどは 高校 情

プログラミング実習I

スライド 1

学習のライフサイクルを支援する史跡学習システムの開発 松江工業高等専門学校 藤井諭後田真希南葉恵美子

< F2D968382CC A837E B E9197BF2E6A7464>

Microsoft Word - 操作マニュアル-Excel-2.doc

Microsoft PowerPoint - kougi4.ppt

フィルタとは

ゲームエンジンの構成要素

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Microsoft PowerPoint - prog04.ppt

Access研修テキスト

パソコンで楽チン、電力管理3169編

Microsoft Word - 微分入門.doc

2 / 16 ページ 第 7 講データ処理 ブック ( ファイル ) を開く第 6 講で保存したブック internet.xlsx を開きましょう 1. [Office ボタン ] から [ 開く ] をクリックします 2. [ ファイルの場所 ] がデータを保存している場所になっている

IPPO - 校内研修支援プログラム - 使用説明書 目次 項 目 ページ 1 プログラム利用の準備 この説明書の記述について プログラムの動作環境等 プログラムファイルのコピー プログラムファイルの起動 4 2 プログラムファイルの利用

Microsoft PowerPoint - kougi2.ppt

相関係数と偏差ベクトル

目次 1. 図郭のCSVから矩形シェープファイル保存... i 1.1. 変換元のCSVファイル... i 1.2. ダイアログ... i 1.3. 作成するシェープファイル... ii 2. 図郭 TIN DEM 保存 ダイアログ TINについて... 3

すると メインメニューと呼ばれる DC さくらのメインウィンドウ部が表示されます ( 下の画面がスクリーンシ ョットです ) メインメニューは ウィンドウ右上の ボタンを押すと閉じます リスト内のアイテムは ダウンロードのタスクを表します ダウンロード状況を把握できます メニュー項目やボタンの説明は

Transcription:

科学技術館 CanSat プロジェクト 第 1 期 第 3 回データの可視化

今回の目標 前回の最後に GoogleEarthでGPSモジュールのデータを表示させました その過程で GPSモジュールのデータの読み込みと時刻 緯度 経度のデータの抽出と セルへの書き込みを行いました 今回はこの処理からスタートします GPSモジュールのデータも 様々な見方がありえます CanSatの大会で重要な見方の一つは 時刻毎のCanSatの位置です 緯度や経度で位置や速度を表しても 直感的な理解はできません また CanSatは高さ方向にも移動するので 3 次元的な見方が必要になります 上記を踏まえて 今回はGPSモジュールのデータを 3 次元プロット にすることを目標とします それに必要なことを 課題を交えながら一つずつ説明します

今回の流れ 1 データの表示形式の変更 2 円に関わる数学 3 測地系の基礎 4 座標変換 ( その1) 5 地球規模での三次元プロット 6 座標変換 ( その2) 7 地域規模での三次元プロット 参加者の皆様へ全部を2 時間以内にこなすのは難しいかもしれません できるところまでやりましょう 独習 復習される方へこの教材は 順番に読んでいただきたいのですが 1 回読んで全てを理解しなくても大丈夫です おそらく 後の方を読んでからでないとわからない所もあります 実践しながら 繰り返し読むことをお勧めします 教材ファイル kouza1-3 教材.xlsm, GPSsample.txt, GPSsample2.txt, kouza1-3 課題解答.txt を使います ( 当日参加の方は X: CanSat から入手できます )

まずは 今回の教材となる xlsm ファイルを開き VBA エディタを開いてください 前回の課題 4で 下記の処理を行いました *GPSモジュールのデータの読み込み * 時刻 緯度 経度のデータの抽出 * セルへの書き込み このときの解答とした Sub プロシージャが最初から入っています ( kadai1_2_4() ) サンプルデータも用意してあるので この Sub プロシージャを実行してみてください

課題 1: 緯度 経度を正負の値で表現する kadai1() のソースコードは あと一歩のところまで作ってあります 今回の目標のために データを下記のように表現する必要があります * 経度 緯度の順にする ( 必須ではないがわかりやすくなる ) * 東経 (E) は正の値 西経 (W) は負の値で表現する * 北緯 (N) は正の値 南緯 (S) は負の値で表現する そのために必要な変更を加えてください < 制限時間 5 分 >

課題 1 の解答 GGA レコード ($GPGGA がある行 ) の処理を 右のようにするとできます ワークシートの上の方に書かれている通り このあとは経度 緯度の順で処理をする ので よく確認してください

例題 1: 時刻を秒単位にする GPSsample2.txtをメモ帳で開いてください GGAレコードの時刻の表現を確認しましょう HHMMSS.SSSとなっています (HHは時間単位 MMは分単位 SS.SSSは秒単位です ) このままでは 最初のレコードから何秒経過しているかが すぐにはわかりません そこで この形式を秒単位に変換する方法を考えてみましょう この変換は汎用的な処理なので 複数の場所で実施することが予想されます このようなときは Functionプロシージャを作ることをおすすめします

例題 1: 時刻を秒単位にする この処理は下記のように分けてコーディングすると わかりやすく また使い勝手がよくなるように思えます ( このあたりの考え方は プログラマのセンスによりますが ) (1) 時刻の文字列を分解して 時 分 秒を取り出す (2)(1) で得られた時 分 秒から 秒数を計算する そこで下記 2 個のプロシージャを misc モジュール内に作ってあります (1)Public Sub SplitGGATime(ggaTime As String, ByRef h As Long, m As Long, s As Double) (2)Public Function ConvGGATimeToSec(ggaTime As String) As Double これらのソースコードを確認しましょう

例題 1: 時刻を秒単位にする (1)Public Sub SplitGGATime(ggaTime As String, ByRef h As Long, m As Long, s As Double) 引数についている ByRef は データを受け取るのではなく変数への参照を受け取ることを明示します これによって 引数とされた変数にデータを書き込めるようになります ( 実は 元々省略してもByRefとして解釈されますが ソースコードを読む人のためにも明示することは重要です ) ( データを受け取りたいだけで 変数への書き込みを防ぎたいときは ByVal を使います ) Mid([ 文字列 ],[ 取り出す文字列の先頭位置 ],[ 取り出す文字列の長さ ]) これはVBAで既定の関数です 文字列を部分的に取り出して返します Len([ 文字列 ]) これはVBAで既定の関数です 文字列の文字数を返します CLng([ 文字列 ]) は整数型への変換 CDbl([ 文字列 ]) は倍精度浮動小数点数型への変換関数です

例題 1: 時刻を秒単位にする (2)Public Function ConvGGATimeToSec(ggaTime As String) As Double GGAの時刻文字列の前処理にSplitGGAtimeを使います h,m,sへの変換を内部でするのではなく 引数として与えると より汎用的な関数に なります ( 汎用的とは 他の用途でも使えそうだということ ) ただし今回のこの関数の目的はGGAレコードの処理のみなので 呼び出し側のソースコードが簡単になるような引数の取り方をしています ( 実際には このようなことをあらかじめ考慮できるとは限りません 呼び出し側のソースコードを作りながら 思いつきで引数の取り方を変えるのもよくあることです )

例題 1: 時刻を秒単位にする ConvGGATimeToSec で 00:00:00 からの秒数が計算できますが この時刻をまたぐと秒数がリセットされるという問題があります (GPSsample2.txt の 431 行目に そのようなデータがあります ) この問題は 00:00:00 をまたいだ ( つまり日付が変わった ) ことを検知し そのたびに秒数を一日分 (86400 秒 ) 加算することで解決できます

例題 1: 時刻を秒単位にする test1() を実行し GPSsample2.txt を読み込んでみてください ワークシートに出力される時刻の形式と内容を 確認してください test1() の時刻処理がどのようにされているか 確認してください

CanSat が発射から何秒後にどの位置にあったか 具体的に指を差して示すためには どのような情報が必要でしょうか 経度と緯度から直接わかることではありません 発射地点から見て東に Xm 北に Ym 高さ Zm の位置にあった ということが言えれば 大雑把ではあっても指を差せます また メジャーを使ってその位置の真下に標識を置くこともできます この X,Y,Z の値は 経度 緯度 高さから計算で求めることができます そのための基礎として 円周上の位置を示す 角度 から XY 座標を求める方法を 説明します

数学で扱う角度の単位 : ラジアン 半径 1 の円周の長さは 2 π です (π は円周率 (3.14159265358979 )) 1 2 ππ そこで 360 deg( 度 )=2π rad( ラジアン ) ということにします そうすると 弧の長さで角度を表せるようになります シータ θθ (deg) を (rad) に換算するには 逆に φφ (rad) は 180 ππ ππ 180 φφ (deg) となります ( 例 ) 45 (deg) = 1 ππ (rad) 4 2 3 ファイ ππ (rad) = 120 (deg) θθ (rad) とします 小学校で 1 周は 360 度と習いますが この 360 という数字に数学的な根拠はありません 数学的に便利なように 1 周の角度を定めるとすれば 360 よりは 2π の方が合理的といえます ( 大学などで オイラーの等式 を学ぶと より実感することでしょう ) ππ 3 2 ππ θθ

サイン コサインタンジェント 三角関数 :sin, cos, tan 半径が 1 の円周上の特定の点は 図のように角度 θ で表す ことができます その点から X 軸に下ろした垂線の足の位置が その点の sin θθ X 座標です Y 軸についても同様です これらはθによって決まる値なので それぞれ cos θθ, sin θθ という関数で表すことができます cos θθ, sin θθの具体的な値を求める計算は難しいのですが Excelではそれらを計算する関数が用意されています 今回は使いませんが 数学の世界では tan θθ も加えた 3 関数は まとめて 三角関数 と呼ばれます θθ cos θθ なお tan θθ = sin θθ cos θθ = yy xx です

数学演習 1: 半径 1 (m) の円周の XY 座標を求める ワークシートを 数学演習 1 に切り替えてください 円周上の位置を示す角度 θは 10 度刻みで1 周分書かれています 半径 1なので cosθとsinθは そのままXY 座標となります θ=0 の点のみ ラジアン値と XY 座標を求める数式が入って います 数式の意味を確認してください 数式の部分を他の行にコピペすると その行の値が計算され グラフに表示されます 1 周分やってみてください

数学演習 2: 半径 6,378,137(m) の円周の XY 座標を求める ワークシートを 数学演習 2 に切り替えてください θ=0 の点のみ ラジアン値と XY 座標を求める数式が入れてあります 半径 6,378,137の円は 単に半径 1の円を6,378,137 倍に引き伸ばした形をしています このことから 数式の意味を考えてください 数式の部分を他の行にコピペすると その行の値が計算され グラフに表示されます 1 周分やってみてください これで 右の図のように赤道上で経度が指定された点の座標が計算できたことになります θθ

数学演習 3: 経度 緯度から XYZ 座標を求める 経度 0の子午線は イギリスのグリニッジを通ります この線の上で緯度 φφの点 Pを想像しましょう Pのところで地球を 水平 に切った断面は円となります 半径は地球の半径のcos φφ 倍となります この円( 緯線 ) の上で経度 θθの点 Tの位置を考えましょう 先ほどと同様の方法でXY 座標が計算できます 点 TのZ 座標は 図から明らかなように sin φφとなります これが 経度 緯度が指定された地球上の位置をXYZ 座標で表す方法の基本です GPSで使用されているIERS 基準子午線は グリニッジ天文台から100mほど東にずれています θθ とか φφ でどの角度を表すか ということにはある程度慣例がありますが 慣例にとらわれすぎると他の慣例と整合性がとれなくなります 結局 何にどの記号を使うかを きちんと定義するのが基本です φφ θθ P T

数学演習 3: 経度 緯度から XYZ 座標を求める ワークシートを 数学演習 3 に切り替えてください 経度 θθ=0 緯度 φφ=0の点のみ ラジアン値とXYZ 座標を求める数式が入れてあります 数式の部分を他の行にコピペすると その行の値が計算され グラフに表示されます 北緯 80 度までの行を埋めてみてください φφ θθ P T この方法で それらしい XYZ 座標値が出てきますが あまり実用にはなりません 理由はこの後説明します

数学演習 3の方法で 地球上の経度 緯度からXYZ 座標を得ることができます この座標系 ( 座標の取り方 ) は ECEF( 地球中心 地球固定直交座標系 ) と呼ばれます 地球中心が原点で X 軸は経度 0 度の子午線と赤道の交点を通ります Y 軸は東経 90 度の子午線と赤道の交点を通り Z 軸は北極を通ります φφ θθ P T しかし

この計算方法のままでは 大きなずれが生じてしまいます その理由は下記の通りです * 地球は球体が Z 軸方向に約 0.3% つぶれたような形をしています ( 数十 km 規模のずれ ) これについては WGS84( 米国防総省が定めた世界測地系であり GPS で採用 ) で定められた 地球楕円体 の形状を前提として計算 すれば補正できます これで地球楕円体表面の座標が得られますが GPS の高さ方向の データを反映させるにはどうしたらよいか考えてみましょう

高さのデータは GGA レコードの海抜高度 ( 平均的な海面からの高さ ) から得られます しかし 海抜高度は地球楕円体からの高さではありません その主な理由は下記の通りです * 地形や地下の岩石等の密度分布により 地表の重力 が変動するので ジオイド高 ( 平均的な海面高度 ) が 場所によって変わります ( 数十 m 規模の変動 ) これを補正する手段として EGM96( 米国防総省による ) などのジオイド高の分布モデルが存在します 今回使用しているGPSモジュールは そのようなデータまたは計算式を内蔵しており GGAレコードに含めて出力しています これを使って ジオイド高さ+ 海抜高度 = 地球楕円体からの高さという計算をすればよいことになります

測地系の基礎を踏まえて ECEF の XYZ 座標を計算することを目的とします ワークシートを GPGGA データ に切り替えてください ソースコードはすでにある ( test2(),test3() ) ので よく読んでその意味を理解できるよう がんばってください 今回使用するサンプルデータは "GPSsample2.txt" です 前回使った GPSsample.txt も 時間に余裕がある人は使ってみてください まずは メモ帳で GGA レコードを見ましょう 9 番目のフィールドが海抜高度 11 番目のフィールドがジオイド高です ( レコード内の 1 個ずつのデータを フィールド と呼びます )

例題 2: 海抜高度とジオイド高さの読み取り test2() を実行し "GPSsample2.txt" を読み込んで ください ソースコードを見て 海抜高度とジオイド高を どのように読み取っているか どのように処理しているかを確認してください

例題 3:ECEF での XYZ 座標の計算 test3() を実行して "GPSsample2.txt" を読み込み XYZ 座標が出てくる ことを確認してください 海抜高度とジオイド高さの和が 地球楕円体からの高さです WGS84に基づく計算は複雑なので そのための クラス を用意してあります クラスを使うときは 必ず下記のような初期化処理が必要です Set [ クラス変数名 ] = new [ クラス名 ]([ 初期化時の引数 ]) WGS84 クラスのメンバプロシージャをどのように使っているかに 注目してください 次は この XYZ 座標をグラフにしてみたいのですが

課題 2:ECEF での XYZ 座標のファイル出力 Excel では 残念ながら XYZ の三次元の方向を持つグラフ 三次元プロット を作ることができません この分野でよく使われるフリーソフトとして "gnuplot" があるので 今回はそれを使います gnuplot で読み込みやすいように すべての XYZ 座標を下記の形式でファイル出力するプロシージャを 作ります グヌープロット [1 番目の X 座標値 ] [1 番目の Y 座標値 ] [1 番目の Z 座標値 ] [2 番目の X 座標値 ] [2 番目の Y 座標値 ] [2 番目の Z 座標値 ] 出力ファイル名は "ecefxyz.txt" とします kadai2() のソースコードが途中まで作ってあるので それを完成させて 実行してください ( ヒント :Print #1,...) < 制限時間 5 分 >

課題 2 の解答 For~Next ループの中で 下記のように処理をすれば OK です

スタートメニューから gnuplot 5.0 patchlevel 1 を起動してください コンソール ( コンピュータと文字で対話するための画面 ) が開きます この画面でコマンド ( 命令文 ) を打ち込んで グラフを描くのが基本的な使い方です コマンドを覚えるのは大変なので ある程度 自動化するためのメニューが備えられています

プロット から 三次元プロット を選択し コンソールに "splot" が 表示されることを確認してください プロット から データファイル名... を選択すると ファイル選択画面が でます 右下の拡張子フィルタを All Files (*.*) に変更してください これで 拡張子が txt のファイルも表示されるようになります 課題 2 で保存した "ecefxyz.txt" を選択すると そのファイル名がコンソールに表示されます

コンソールで Enter キーを押すとグラフが出てきます このグラフは マウスで回転させることができます 形状を確認してください 地球表面が傾いているので データが傾いています GPSsample.txt のプロットも見てみましょう データを 変えるには test3() からの手順を繰り返してください

GPSsample2.txtのデータは GoogleEarthで見るとこうなります 実際の地形と三次元プロットの結果は あまり一致していません GPS から得られる高度の値はかなり精度が低く 10m 程度は簡単にずれてしまいます その理由についても考えてみてください

場所によって地面の傾きが違うので ECEFの三次元プロットでは 極付近でない限り直感的にとらえにくくなってしまいます 直感的にとらえやすい座標系の例は 下記のようなものです X 軸は 東西方向で 東を正とする Y 軸は 南北方向で 北を正とする Z 軸は 高さ方向で 上を正とする このような座標系を 地平座標系 と呼びます ( 右図では "local" と表記しています ) この座標系になれば 下記のことが直感的に理解できます *CanSatが打ち上げ地点から何 m 上昇してから分離されたか * 東西南北に どのように移動しながら降下したか ただし地球は丸いので この座標系ではあまり大きな距離は扱えません

例題 4: 地平座標系での XYZ 座標の計算 test4() を実行して 先ほどとは別のXYZ 座標が出てくることを確認してください この座標系では 最初のGGAレコードが示す地点を原点とします それをどのように処理しているか ソースコードをよく見て理解してください ECEFからの座標軸の傾きを打ち消す計算に 行列 を使っています その計算は複雑なので行列計算を扱うクラス "Matrix3d" を用意してあり WGS84クラスの中で使っています ( なお行列を使わないと さらに複雑になります )

課題 3: 地平座標系での XYZ 座標のファイル出力 課題 2 と同様の方法で 地平座標系の XYZ 座標を下記の形式でファイル出力しましょう kadai2 をコピペして kadai3 を作れば あとは出力元のセル指定と出力ファイル名を変更するだけです ファイル名は localxyz.txt" とします [1 番目の X 座標値 ] [1 番目の Y 座標値 ] [1 番目の Z 座標値 ] [2 番目の X 座標値 ] [2 番目の Y 座標値 ] [2 番目の Z 座標値 ] < 制限時間 5 分 >

課題 3 の解答 kadai2() をコピペして For~Next ループの中の Print に使っているデータを 下記のように変更すれば OK です

gnuplot が起動していない場合は もう一度起動してください メニューバーから 三次元プロット を選択し コンソールに "splot" が表示されることを 確認してください メニューバーから データファイル名... を選択し 課題 2 で保存した "ecefxyz.txt" を 選択し コンソールで Enter キーを押してください 地球表面の傾きはなくなっていて 東西 南北 高さ方向が座標軸に一致している ことを確認してください

今回は 時刻と共に変化する位置情報をどのように可視化するか というテーマで一つの例を 体験していただきました 単純に 位置 といっても 地球規模で考えると意外と考えることが多く 複雑な処理が必要となる ことがわかると思います この第 1 期の講座では VBAで可能になることの ほんの一部を扱ったに過ぎません 他のOffice 製品やOS そして様々な外部ライブラリの機能( 音声 映像 USB 機器など ) を呼び出し 使いこなすことで 市販できるようなレベルのソフトも作ることができます ( 個別の顧客向けに 業務システムを丸ごとVBAで作って納品するケースもあります )

CanSat を作るという目標までは まだまだ長い道のりがあります ( 本物の人工衛星を作るのに比べれば かなり短いですが ) 皆さんは今後 ソフトウェア開発技術の別の用途に目覚めるかもしれません 数をこなすことが大事なので 科学計算でもゲーム作成でも とにかくやってみてください ソフトウェア開発技術のうち 特にプログラミング ( コーディング ) で必要な考え方は 言語が違っても大体一緒です 講座に参加した方は C/C++, C#, Java, PHP 等も 今後あまり苦労せず学ぶことができるでしょう どのようなことでも 今期の講座の内容がいつか役に立つことを願います < おわり >