Untidy Bookshelves

アクセスカウンタ

zoom RSS *** 風向を内挿処理する ***

<<   作成日時 : 2014/11/05 16:53   >>

ブログ気持玉 0 / トラックバック 0 / コメント 4

 一週間前に提示されたお題は、風向の時間的な内挿処理。
 たとえば、下のような3時間ごとのデータがあったとして、間のコマをどう埋めるかという問題です。


 GSMやMSMは地上予測値が1時間ごとにあるのに対し、高層の予測値は3時間ごとしかありません。
 風向以外の気温や湿度、ジオポテンシャルなら、単純に内挿するだけ。
 でも、風向にはほかの要素にはない問題が2つあります。

 一つは、風向は0度から360度で表しているので、360度より大きい値の処理が必要なこと。
 まあ、これは360より大きい値が出てきたら360を引くだけ、0より小さい値が出てきたら360を足すだけ。
 処理としては簡単です。

 もう一つはやっかいで、風向が時計回りで変わっているか、反時計回りで変わっているかの判別。
 風向が北から南に変わった時、北→東→南と変わったのか、北→西→南と変わったのか、データだけでは両者を判断できません。
 仕方がないので、前後の時間帯の風向差が180度より小さいほうを経由して・・・ということにしました。
 風向が北から南南東に変わった時は東成分の風向を経由、北から南南西に変わった時は西成分を経由・・・という意味。いうまでもなく、物理的には何の根拠もない決め打ちです。。

 やっつけで作成したマクロはこんな感じ。
 「360より大きい値が出てきたら360を引くだけ、0より小さい値が出てきたら360を足すだけ」の処理が重複しているので、これをまとめればかなり短く出来そうですが、動いたので終了。。

     For y = 1 To 8
      For x = 2 To 4
     '角度の差分をとる
       c = Cells((y + 1) * 3, x) - Cells(y * 3, x)
      If c > 180 Then
       c = c - 360
      ElseIf c < -180 Then
       c = c + 360
      End If

      d1 = Cells(y * 3, x) + c / 3 'FTが3で割って1余る場合、差分の1/3を加える。
      If d1 >= 360 Then
       d1 = d1 - 360
      ElseIf d1 < 0 Then
       d1 = d1 + 360
      End If

      d2 = Cells(y * 3, x) + c / 3 * 2 'FTが3で割って2余る場合、差分の2/3を加える。
      If d2 >= 360 Then
       d2 = d2 - 360
      ElseIf d2 < 0 Then
       d2 = d2 + 360
      End If

      Cells(y * 3 + 1, x) = d1
      Cells(y * 3 + 2, x) = d2

      Next x
     Next y


 結果は以下の通り。無事、内挿されたようです。


 それにしても、これを組むのに1時間ぐらいかかるとは・・・。
 終わってみれば単純な話に思えますが、頭が固くなってきたということですね。。

 きのう、Yahoo!のトップに、シフト制勤務、脳機能の低下と関連かという記事が載っていました。
 夜勤がなかったとしても低下は免れないのに・・・すでに手遅れです。。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(4件)

内 容 ニックネーム/日時
風向急変で想い出しましたが、風向急変に対応するために、360度ではなく、540度を使う場合もあるそうです。要は360度(北)を超えて急変する場合にスケールアウト(0リセット)の問題をクリアーするための方法だそうです。風向急変を報じる場合、180度から40度に変わったとき、時計/反時計回りの区別が簡単に出来ないので、便宜上時計回りに急変したとして報じることがあるため。ここがいやらしいところなのですが、そこを検討する必要はあるかも知れません。一種のキメも必要ですが。
navarea11
2014/11/06 01:12
なるほど。そんな方法があるのですか。
180度から40度に時計回りに変わった時は
180度→400度と表すということですね。
ただ、(あまりありそうにありませんが)
400度(通常は40度)からSW(ふつうは225度)に
さらに時計回りに変わった時はどうするのでしょうか。
400度→585度だと540を超えてしまいます。
400度を40度に仕切り直ししたうえで、
40度→225度とするのでしょうか。
たかはし
2014/11/07 12:53
180度から時計回りに40度となった場合、360度を超えた場合の条件を入れてやるのがミソ。変化量を出すのか、急変後の向きを出すのかによっても変わりますが、いずれにしても360度を超えた時に限り条件を変える。と言うところ。元々は昔の自記風向風速計で風向をペン書きするとき、360度で描くだけでは、実際の風向きの変化が表現できなくなるために編み出された方法です。デジタルの数値だけでは風向急変が時計回りか反時計回りはすぐに判りませんが、540度にすることで見えてくると言うところです。
navarea11
2014/11/08 00:50
自記風向風速計のための方法ですか。
それなら、私が先に書いた「仕切り直し」などは必要ないですね。
ちょっと数値ばかりにこだわりすぎていました。
360では見えなくて、540で見えてくる・・というのは何だか深いです。
たかはし
2014/11/08 22:22

コメントする help

ニックネーム
本 文
*** 風向を内挿処理する *** Untidy Bookshelves/BIGLOBEウェブリブログ
文字サイズ:       閉じる