単位変換覚え書き〜風向風速

  • 2012.08.01 Wednesday
  • 00:06

別の投稿で単位変換について書いているが、
風向風速はちょっと長くなりそうなので、新たに投稿します。


GRIBデータではuとv成分(u=東西、v=南北 で、西風=西→東が+、南風=南→北が+)に分けられて格納されているが、
実際に使う場合は風向風速に変換する必要がある。
(天気図の矢羽根を書きたいなど)

■風速(ベクトル)を求める
風速は至って簡単
 
SQRT(u2[m / s] + v2[m / s]) = Result[m / s]
※SQRTは平方根

■風向
この算出が面倒

まず、図を描こうとすると、uもvも正だからおそらくこういう風に考えるだろう。

風速風向

ようするに、原点からu軸に+u、v軸に+vと描きたくなる。
そして、風向は北から順に東(90)→南(180)→西()270→北(360)なので、
図で言うv軸からの角度が求める風向と考えたくなる。


続きを読む >>


関連投稿
単位変換覚え書き

気象データを解く〜データを入手する
気象データを解く〜データを開く、前に用語とか整理
気象データを解く〜データを開く まずは基本的な第0節から
気象データを解く〜データを開く 第1節を読む
気象データを解く〜データを開く 第3節を読む
気象データを解く〜データを開く 第4節を読む
気象データを解く〜データを開く 第5節を読む
気象データを解く〜データを開く 第7節を読む
気象データを解く〜データを開く 続くデータを見ていく
気象データを解く〜データを開く surfファイルを読む
気象データを解く〜データをパソコンで解析する その2
気象データを解く〜データをパソコンで解析する その3
 


ベクトル(風速)の原点は格子点なので、この図で問題ないのだが、
求める角度(風向)はこれでは間違え。


上にも描いたように、+uは西風、+vは南風なので、++は南西の風であるから、

風速風向

が正解の求める風向である。

???かもしれないので、矢羽根になおして描いてみると、

風速風向

である(南西の風)。


ここまで分かれば簡単である。

u,v成分で分解されているので、角度はTANの逆、つまりATANで求めればよい。

ただし、
 
・必ず0で割り算するところ、つまり、v成分が0となるところがある。
・各象限毎に計算が異なる。

という点に注意しないといけない。

とりあえず、v≠0の場合で、
 
第1象限(+,+ つまり西〜南)は ATAN(u[m / s] / v[m / s]) + π     = Result[Deg]
第2象限(-,+ つまり南〜東)は ATAN(u[m / s] / v[m / s]) + π     = Result[Deg]
第3象限(-,- つまり東〜北)は ATAN(u[m / s] / v[m / s])          = Result[Deg]
第4象限(+,- つまり北〜西)は ATAN(u[m / s] / v[m / s]) + 2 x π = Result[Deg]
(象限で描くと西→南→東→北→西となってしまう・・・)

で求まる(はず)。
※計算方法はv/uで計算する方法などいろいろあります。
[Deg]と書いていますが、実際にATANをエクセルなどで計算させるとラジアンが返ってくるので、
DEGREES関数で角度変換する必要があります。

なお、
 
v=0のときで、u>0ならば270度(π x 3/2)、u<0ならば90度(π / 2)

となる。

また、
 
u=0、v=0は無風(calm)で角度も0となる

ので、北風は360度とする方が都合がよい。


たぶんあっていると思うが、計算してみてください。

確認のため、風向風速計算機を作ってみました。


計算結果を表にしたらこんな具合?
 
SN WE 風向 風速
N -1.0 0.0 360.00 1.00
-0.9 -0.1 6.34 0.91
-0.8 -0.2 14.04 0.82
-0.7 -0.3 23.20 0.76
-0.6 -0.4 33.69 0.72
NE -0.5 -0.5 45.00 0.71
-0.4 -0.6 56.31 0.72
-0.3 -0.7 66.80 0.76
-0.2 -0.8 75.96 0.82
-0.1 -0.9 83.66 0.91
E 0.0 -1.0 90.00 1.00
0.1 -0.9 96.34 0.91
0.2 -0.8 104.04 0.82
0.3 -0.7 113.20 0.76
0.4 -0.6 123.69 0.72
SE 0.5 -0.5 135.00 0.71
0.6 -0.4 146.31 0.72
0.7 -0.3 156.80 0.76
0.8 -0.2 165.96 0.82
0.9 -0.1 173.66 0.91
S 1.0 0.0 180.00 1.00
0.9 0.1 186.34 0.91
0.8 0.2 194.04 0.82
0.7 0.3 203.20 0.76
0.6 0.4 213.69 0.72
SW 0.5 0.5 225.00 0.71
0.4 0.6 236.31 0.72
0.3 0.7 246.80 0.76
0.2 0.8 255.96 0.82
0.1 0.9 263.66 0.91
W 0.0 1.0 270.00 1.00
-0.1 0.9 276.34 0.91
-0.2 0.8 284.04 0.82
-0.3 0.7 293.20 0.76
-0.4 0.6 303.69 0.72
NW -0.5 0.5 315.00 0.71
-0.6 0.4 326.31 0.72
-0.7 0.3 336.80 0.76
-0.8 0.2 345.96 0.82
-0.9 0.1 353.66 0.91
N -1.0 0.0 360.00 1.00



追記
またかずさまの方法の方がすっきりしていて良いと感じました。

ただし、ソフトウエアやプログラム言語によってATAN2の仕様が異なるようで、

エクセルで計算する場合は、
 
すべての象限で ATAN2(v[m / s] , u[m / s]) + π = Result[Deg]

で求まる(はず)。

VisualBasicやC#は
 
すべての象限で ATAN2(u[m / s] , v[m / s]) + π = Result[Deg]

となるようです。

ATAN2の良いところは、v=0でも計算してくれるところでしょうか。
また、u=0, v=-1(北風)を360度で計算してくれるので助かります。

ただし、u=0, v=0は場合分けしておかなければなりません。


追記
■風向風速から成分分解する
逆変換を書いていませんでした。

まず、風向=0,風速=0はもちろん東西南北=0です。

残りはSin、Cosで求められます。
 
東西成分 = Vct[m / s] * SIN( Deg[Deg] + π ) = Result[m / s]
南北成分 = Vct[m / s] * COS( Deg[Deg] + π ) = Result[m / s]

※[Deg]と書いていますが、実際にエクセルで計算する場合は角度はラジアンに変換する必要があります。


追記2
■16方位に置き換える。
上の式で出てくる値は360度の方位角となる。
天気予報などでは何度の風とは言わず、北の風や北北東の風などに代表される16方位などが用いられる。

360度まで計算できたので、これを16方位に置き換えるにはどうしたらよいか考える。

まず、16方位なので、1方位毎の角度は22.5度となる。

つまり、北(360)→北北東(22.5)→北東(45)・・・ である。

さて、ここで次の疑問が出てくる。
ちょうど0度や22.5度は北や北北東に置き換えることはできるが、
その間の0度を超えて22.5度未満はどのように分ければいいのか・・・。

答えは気象庁の気象観測ガイドブックにある風向風速計の外観と風向表示にある。

この図を見ると、北は 0±11.25度、北北東は 22.5±11.25度・・・ 
と分けられている。

ただし、境界となる11.25度については書いていないが、
角度は0度を含めず360度なので、-11.25度<方位≦+11.25度と考えるのが妥当であろう。



関連投稿
単位変換覚え書き

気象データを解く〜データを入手する
気象データを解く〜データを開く、前に用語とか整理
気象データを解く〜データを開く まずは基本的な第0節から
気象データを解く〜データを開く 第1節を読む
気象データを解く〜データを開く 第3節を読む
気象データを解く〜データを開く 第4節を読む
気象データを解く〜データを開く 第5節を読む
気象データを解く〜データを開く 第7節を読む
気象データを解く〜データを開く 続くデータを見ていく
気象データを解く〜データを開く surfファイルを読む
気象データを解く〜データをパソコンで解析する その2
気象データを解く〜データをパソコンで解析する その3

風向風速計算機

 
コメント
風向の角度計算方法を調べててこのページにきました。

VBAで作ってみましたが、上記式だとうまくいきませんでした。VBAの場合、ATANの出力がちがうんでしょうかね。
下記のマクロだと、同じ計算結果になりました。

Public Const PI As Double = 3.14159265358979

Public Function transdeg(ByVal uwin As Single, ByVal vwin As Single) As Single
Dim degre As Single

If uwin = 0 And vwin = 0 Then
degre = 0
ElseIf uwin = 0 Then
If vwin > 0 Then
degre = 180
ElseIf vwin < 0 Then
degre = 360
End If
ElseIf vwin = 0 Then
If uwin > 0 Then
degre = 270
ElseIf uwin < 0 Then
degre = 90
End If

ElseIf uwin > 0 And vwin > 0 Then '第1象限
degre = Application.WorksheetFunction.Degrees(Application.WorksheetFunction.Atan2(vwin, uwin) + PI)
ElseIf uwin > 0 And vwin < 0 Then '第2象限
degre = Application.WorksheetFunction.Degrees(Application.WorksheetFunction.Atan2(vwin, uwin) + PI)
ElseIf uwin < 0 And vwin < 0 Then '第3象限
degre = Application.WorksheetFunction.Degrees(Application.WorksheetFunction.Atan2(vwin, uwin) + PI)
ElseIf uwin < 0 And vwin > 0 Then '第4象限
degre = Application.WorksheetFunction.Degrees(Application.WorksheetFunction.Atan2(vwin, uwin) + PI)
End If

transdeg = Round(degre, 3)

End Function
  • またかず
  • 2012/08/09 10:37 PM
失礼しました。
コメント部分の象限が違いましたね。
  • またかず
  • 2012/08/09 10:41 PM
またかずさま

コメントありがとうございます。

エクセルのATAN2()を使う場合は、

 第1象限(+,+ つまり西〜南)は 3/2 x π - ATAN2(u[m / s] , v[m / s]) = Result[Deg]
 第2象限(-,+ つまり南〜東)は 3/2 x π - ATAN2(u[m / s] , v[m / s]) = Result[Deg]
 第3象限(-,- つまり東〜北)は -(π/2 + ATAN2(u[m / s] , v[m / s])) = Result[Deg]
 第4象限(+,- つまり北〜西)は 3/2 x π - ATAN2(u[m / s] , v[m / s]) = Result[Deg]

※x = u , y = v
 3/2 x π = 270度
 第3象限の符号に注意

となります。

またかずさまの方法はすべてPIを足せばよく、式が複雑にならないので良いと感じました。
x = v , y = uとなる点で注意が必要ですが。

またかずさまの方法

 すべての象限で ATAN2(v[m / s] , u[m / s]) + π = Result[Deg]

ありがとうございました。


追記
VisualBasicのMath.Atan2()の場合は、

 すべての象限で ATAN2(u[m / s] , v[m / s]) + π = Result[Deg]

で計算できそうです。
もうちょっと悩んで見ます。

  • rockecco
  • 2012/08/10 8:52 AM
そういえば、結局、同じ式になっているので、象限で分ける必要ないですよね。
ロケッこさんのブログは気象関係のことが大変詳しく書かれていて、参考になってます。
  • またかず
  • 2012/08/10 10:02 PM
またかずさま

たまたまエクセルでグリグリっとやったら、90度なんかもATAN2なら計算してくれたので、
0以外は分ける必要がなさそうです。

趣味と言いますか、職業柄と言いますか。
なにかまたありましたらコメントください。

↓に計算機を作ってみました。
http://goo.gl/FRdWO
  • rockecco
  • 2012/08/10 11:47 PM
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>

search this site.

よく使う、検索される投稿

categories

アマゾン

楽天

selected entries

archives

recent comment

recent trackback

profile


※当ブログはリンクフリーですが、 取材や雑誌等で掲載される場合は、事前にお知らせください

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM