Wechat: yu389741| Email: gisdqy@163.com

Shop:https://www.giserdqy.com/shop

关于风向的u、v分量及js、c#根据uv计算风向公式


关于风向的u、v分量,及根据uv计算风向公式

风向是按正北方向起算的,0度表示北风。90度表示东风。

u表示经度方向上的风,v表示纬度方向上的风。

u为正,表示西风,从西边吹来的风。v为正,表示南风,从南边从来的风。假如u为1,v为1,则表示西南风。


1. C#

double v ;//v分量
double u;//u分量
double fx= 999.9; //风向

if (u > 0 & v > 0)
{
  fx = 270 - Math.Atan(v / u) * 180 / Math.PI;
}
else if (u < 0 & v > 0)
{
  fx = 90 - Math.Atan(v / u) * 180 / Math.PI;
}
else if (u < 0 & v < 0)
{
  fx = 90 - Math.Atan(v / u) * 180 / Math.PI;
}
else if (u > 0 & v < 0)
{
  fx = 270 - Math.Atan(v / u) * 180 / Math.PI;
}
else if (u == 0 & v > 0)
{
  fx = 180;
}
else if (u == 0 & v < 0)
{
  fx = 0;
}
else if (u > 0 & v == 0)
{
  fx = 270;
}
else if (u < 0 & v == 0)
{
  fx = 90;
}
else if (u == 0 & v == 0)
{
  fx = 999.9;
}

//风速是uv分量的平方和

double fs= Math.Sqrt(Math.Pow(u, 2) + Math.Pow(v, 2));
  1. js
function fun(u,v) {
if (u > 0 & v > 0) {
  fx = 270 - Math.atan(v / u) * 180 / Math.PI;
}
else if (u < 0 & v > 0) {
  fx = 90 - Math.atan(v / u) * 180 / Math.PI;
}
else if (u < 0 & v < 0) {
  fx = 90 - Math.atan(v / u) * 180 / Math.PI;
}
else if (u > 0 & v < 0) {
  fx = 270 - Math.atan(v / u) * 180 / Math.PI;
}
else if (u == 0 & v > 0) {
  fx = 180;
}
else if (u == 0 & v < 0) {
  fx = 0;
}
else if (u > 0 & v == 0) {
  fx = 270;
}
else if (u < 0 & v == 0) {
  fx = 90;
}
else if (u == 0 & v == 0) {
  fx = 999.9;
}
}

或者:var dir=180+Math.atan2(u,v)*180/Math.PI
但这个公式在JavaScript代码执行时不完善,不足在于:1、当uv均为0时,dir计算出180度,但实际dir应该无效值;2、当u为0,v<0时,应该是0度,但计算结果为360(虽然也表示0度)

Have any Question or Comment?

发表评论

您的电子邮箱地址不会被公开。

CAPTCHAis initialing...