• 締切済み

高低図を間引く

プログラミングするためのアルゴリズムで悩んでいます。 今、xとしてスタート地点からの距離、yとしてその標高のデータがあります。(x1,y1),(x2,y2)・・・・(xn,yn)のようにn個データがありそれをグラフ化しようとしています。 ところが、ある制約からnが例えば20個くらいまでしか扱えません。 そこで、n個のデータを例えば20個に間引いてグラフイメージとして出したいのですが、本来のデータに一番近いイメージを表現するにはどうしたらいいでしょう?

みんなの回答

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.3

これも一案ですが… > ∧∧∧∧∧∧______/ ̄ ̄\__ > これですと、後ろの山は角度が浅いので間引かれてしまいませんか? > ∧∧∧∧∧∧____________ もし,上図の左側のような短周期の起伏をならし,右側のような ゆるい起伏はなるべくそのまま残したい,ということであれば, 地形を時系列信号とみなして,ローパスフィルタをかけると いいかもしれません.

masa328
質問者

お礼

ローパスフィルターって昔、聞いたなぁ・・。 電気工学でやったのかな? 実際に数学に当てはめるにはどうするのでしょう???

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.2

こんにちは。  測点間隔がそれほど差が無いのであれば、前後の高低差が少ない点を省略したらよいのではないですか。  たとえば、y(a-1)-y(a)、y(a)-y(a+1)の絶対値を調べて、両方とも値が小さければy(a)は省いてもグラフの見た目はあまり変わらないと思います。 では。

masa328
質問者

お礼

絶対値で比べると、 yが0,1,0,1で推移する凸凹より yが0,10,20,30となった点を優先してしまいますよね。(この場合は 直線になっちゃいます。) どんなもんでしょ?

回答No.1

あくまで案ですが・・・ 1番目とn番目は始点と終点なので間引きから除外。 標高が最大と最小の点は間引きから除外。 残りの点について。 各点(x_i,y_i)に対して、以下の関数を定義します。 f(i) = |(y_i+1 - y_i)/(x_i+1 - x_i) - (y_i - y_i-1)/(x_i - x_i-1)| i番目の点でどれだけ折れ曲がっているか、の目安です。 f(i)が大きなものから順に残していくように間引けば、 本来のグラフに近いものができるのではないでしょうか。

masa328
質問者

お礼

ご回答ありがとうございます。折れ曲がり度で間引くのですね。 この場合はどうなりますでしょう。 (最大・最小はとりあえず考慮せず) ∧∧∧∧∧∧______/ ̄ ̄\__ これですと、後ろの山は角度が浅いので間引かれてしまいませんか? ∧∧∧∧∧∧____________ そういうものだと言われればそんな気もしますが・・

関連するQ&A