🚢遣隋使：小野妹子の航海を可視化してみた ～歴史上の人物を動かすアプリ～

クソアプリのカレンダー | Advent Calendar 2023 11日目の記事です。
11月23日のクソアプリハッカソンで作成された新機能です⭐
# 🚢作ったもの
歴史上の人物を可視化する地図アプリ。
小野妹子の航海が可視化できました🚢
[![imoko.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213065/c561ce21-5827-9835-78d6-478268859f72.gif)](https://github.com/AsPJT/PAX_SAPIENTICA)

# [💀配布先](https://github.com/AsPJT/PAX_SAPIENTICA)

https://github.com/AsPJT/PAX_SAPIENTICA.git

[![PAXS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213065/7f4c9605-f684-458c-55b9-45497a3f7d6b.png)](https://github.com/AsPJT/PAX_SAPIENTICA)

歴史を楽しくわかりやすく学べるソフトウェア[「PAX SAPIENTICA」](https://github.com/AsPJT/PAX_SAPIENTICA)の新機能です🌏
小野妹子が動くシュールさがクソアプリポイント👨

もし気に入っていただけたら、**GitHubにスターを付けていただけると開発の励みになります⭐**
開発中で今後も面白い機能を追加していきます。

# 概要

クソアプリハッカソンで発表した内容に+αしています。

### みなさん、歴史は好きですか？
歴史に面白さを感じない方でも楽しめ歴史が好きな人は虜になるそんなクソアプリが出来ました。

### 今回のお題「小野妹子ってなにしたの？」

[![kusoapp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213065/c5668d9c-1b90-7031-84f2-08a691e86455.png)](https://github.com/AsPJT/PAX_SAPIENTICA)
小野妹子は遣隋使です。
遣隋使とは、聖徳太子が当時の中国、隋（ずい）に送った使節です。西暦607年に小野妹子の使節が送られたのが有名です。

### ……と言われてもあんまりイメージしづらいですよね。

そこで **「当時の地図を作って人を動かしたらわかりやすいのでは？」** と考えました。

今年から開発し始めた歴史を楽しくわかりやすく学べるソフトウェア[「PAX SAPIENTICA」](https://github.com/AsPJT/PAX_SAPIENTICA)の新機能として追加しました🌏

[![kusoapp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213065/592c3b31-685e-baa9-f6f9-8765c0ab96bd.png)](https://github.com/AsPJT/PAX_SAPIENTICA)

お披露目。
小野妹子の航海が可視化できました🚢
[![imoko.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213065/c561ce21-5827-9835-78d6-478268859f72.gif)](https://github.com/AsPJT/PAX_SAPIENTICA)
日本書紀に推古15年（607）7月3日、「大礼小野臣妹子を大唐（隋）に遣わされた」と書いてあるため、アプリの右上のカレンダーはその出航日にあわせています。
移動と同時に右上のカレンダーも日付が変わるので、いつどこに誰がいたのかわかりやすくなっています。


---
# 工夫した点

## 🚢小野妹子の航路
1日40km進むと仮定した計算になっています。
経緯度は実数、日付はユリウス日（整数）で管理していて、処理しやすい形式で作っています。
日本の旧暦の他に、グレゴリオ暦やユリウス暦、中国暦なども入れて当時の暦と現在使われている西暦との比較もできます。

|開始経度|開始緯度|終了経度|終了緯度|開始日|終了日|
|---:|---:|---:|---:|---:|---:|
|135.820178|34.47865|135.820178|34.47865|1930749|1942976|
|135.820178|34.47865|135.493778|34.612389|1942976|1942977|
|135.493778|34.612389|135.045282|34.623315|1942977|1942979|
|135.045282|34.623315|134.665682|34.763012|1942979|1942980|
|134.665682|34.763012|133.888478|34.42577|1942980|1942982|
|133.888478|34.42577|133.01633|34.101623|1942982|1942985|
|133.01633|34.101623|131.99233|33.760457|1942985|1942988|
|131.99233|33.760457|130.906071|33.905815|1942988|1942991|
|130.906071|33.905815|130.28363|33.683849|1942991|1942993|
|130.28363|33.683849|129.71681|33.862418|1942993|1942995|
|129.71681|33.862418|129.332687|34.30003|1942995|1942997|
|129.332687|34.30003|128.611793|34.700559|1942997|1942999|
|128.611793|34.700559|125.930963|34.0786|1942999|1943006|
|125.930963|34.0786|126.171272|37.6786|1943006|1943015|
|126.171272|37.6786|120.790971|37.85103|1943015|1943028|
|120.790971|37.85103|108.930082|34.172956|1943028|1943057|
|108.930082|34.172956|108.930082|34.172956|1943057|1943067|

```cpp
    struct PersonLocationPoint {
        std::unordered_map<std::uint_least32_t, std::string> name{}; // 人物名
        paxs::MercatorDeg start_coordinate{}; // 開始の経緯度
        paxs::MercatorDeg end_coordinate{}; // 終了の経緯度
        double overall_length; // 全長
        double min_view, max_view; // 可視化する地図の拡大縮小範囲
        double min_year, max_year; // 可視化する時代（古い年～新しい年）
        std::uint_least32_t texture; // 人物の画像
    };
```
TSVファイルを読み込み、構造体に入れる処理を書いたので上記のようなファイルを用意すればどんな人でも簡単に追加できるようになりました。

## 右上にあるカレンダーと地図の動きを連動

カレンダーと地図が同期して動くので、いつに何が起きたかわかりやすくなっています。

[![スクリーンショット 2023-12-01 22.03.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213065/476a8573-d532-c868-eea2-4714d670f9da.png)](https://github.com/AsPJT/PAX_SAPIENTICA)

# 当時の国名、地名を再現

百済や新羅、日本の令制国など当時の国名や地名を再現しているため、当時の情勢がわかるようにデザインされています。
下の画像では更に古墳を表示しています。大きさ比較も簡単にできます。

[![PAXS_GIS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213065/0ab7a3eb-679a-8062-4fe4-d79a11f7b02f.png)](https://github.com/AsPJT/PAX_SAPIENTICA)

楽しく歴史を知っていきたいですね！

# [💀PAX SAPIENTICA](https://github.com/AsPJT/PAX_SAPIENTICA)

https://github.com/AsPJT/PAX_SAPIENTICA.git

[![PAXS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213065/7f4c9605-f684-458c-55b9-45497a3f7d6b.png)](https://github.com/AsPJT/PAX_SAPIENTICA)

歴史を楽しくわかりやすく学べるソフトウェア[「PAX SAPIENTICA」](https://github.com/AsPJT/PAX_SAPIENTICA)🌏

もし気に入っていただけたら、**GitHubにスターを付けていただけると開発の励みになります⭐**
最後までお読みいただきありがとうございました！