mieki256's diary



2024/04/19(金) [n年前の日記]

#1 [prog][python] スプライン曲線について調べている

_昨日、 QIGISを使って道路データを取り出せること、及び、取り出した道路データを Python + pygame で描画したらそれらしくなっていることを確認できた。

ただ、道路データは、連続している直線データとして取り出しているので、そのまま道路として描画したらカクカクした見た目になってしまうはず。何かしらの補間をかけて滑らかな見た目にしたい。ここはスプライン曲線とかそのあたりを使う場面かなあ、と…。

一応、昔、Ruby + DXRuby でその手の曲線を実装できるのか試したことがあるので、Python に移植してみてもいいのかもしれないけれど。

_mieki256's diary - 曲線について調べていたり
_mieki256's diary - スプライン曲線について調べてたり

プログラミング言語の中では大人気の Python なら、既にその手のライブラリがあるんじゃないか? そっちを使ったほうが早いんじゃないか? と思えてきて、関連情報をググっていた。

どうやら scipy というライブラリが使えそうだなと…。

_pythonでxy座標上の離散点をスプライン補間 #Python - Qiita
_スプライン曲線と補間 - Emotion Explorer
_scipy.interpolate.splprep - SciPy v1.13.0 Manual
_補間 - 読書ノート 1.6dev documentation

ただ、今まで触ったことがないので、何が何だか。とりあえずサンプルを動かすところから始めてみよう…。

scipy関連モジュールをインストール :

Windows10 x64 22H2 + Python 3.10.10 64bit上で、scipy、numpy、matplotlib をインストール。
pip install scipy
pip install numpy
pip install matplotlib
> pip list | egrep "scipy|numpy|matplotlib"
matplotlib                3.8.4
matplotlib-inline         0.1.6
numpy                     1.26.4
scipy                     1.13.0
  • scipy はスプライン補間に使う。
  • numpyは配列処理に使う。
  • matplotlib は得られたデータをグラフで描画するのに使う。

Debian Linux 11 bullseye i686でもインストールしてみた。Debian系の場合、パッケージが用意されているので、apt でインストールする。
sudo apt install python3-scipy python3-numpy python3-matplotlib
$ sudo apt list --installed | grep -E "scipy|numpy|matplotlib"

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

python-matplotlib-data/oldstable,now 3.3.4-1 all [インストール済み、自動]
python-scipy-doc/oldstable,now 1.6.0-2 all [インストール済み]
python3-matplotlib/oldstable,now 3.3.4-1 i386 [インストール済み]
python3-numpy/oldstable,now 1:1.19.5-1 i386 [インストール済み、自動]
python3-scipy/oldstable,now 1.6.0-2 i386 [インストール済み]

以上です。

過去ログ表示

Prev - 2024/04 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project