繁体   English   中英

使用循环量的加权插值法

Weighted Interpolation using means of circular quantities

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在做一个加权插值项目。 每个站点在地图上都有一个坐标点,如下所示。

var stationCoor = [[408,352],[525,348],[535,495],[420,400],[272,145],[175,195],[197,335]];

我正在取位于湖中的点,并使用这些点为来自这些站的输入创建加权平均值。 这是我确定加权数字的函数。

function findWeightSpeed(xPos, yPos){
   var totalHypt = 0;
   var arrHpyt = [];
   var arrWeight = [];
   for(var l=0;l<7;l++){
       var xDis = Math.abs(xPos-stationCoor[l][0]);
       var yDis = Math.abs(yPos-stationCoor[l][1]);
       var hptSq = Math.pow(xDis,2)+Math.pow(yDis,2);
       var hypt = Math.sqrt(hptSq);
       totalHypt = totalHypt+hypt;
       arrHpyt.push(hypt);
   }
   for(var j=0;j<7;j++){
       arrWeight.push(arrHpyt[j]/totalHypt)
   }
   return arrWeight;
}

这将找到点 (xPos,yPos) 和站之间的斜边。 然后将数据相加并将每个站点除以产生加权数字的总数。

我需要使用这些点来衡量这些站的风向。 我正在使用下面的函数来计算点数的平均值。

function averageAngles(){
    var x = 0;
    var y = 0;
    var pi = 22/7;
    var angle = [2.7925,2.8797,2.9670,3.0543, 0.0872]; // 310,320,330,340,10
    for(var i = 0; i < angle.length; i++) {
        x += Math.cos(angle[i]);
        y += Math.sin(angle[i]);
    }
    var average_angle = Math.atan2(y, x);
    console.log((average_angle/pi)*360);
}

这为我提供了所有点的加权平均值为 0.20 的准确信息。 然而,对于7个站(如图下面地图上)的加权平均点类似于[0.1076839005418769, 0.08051796093187284, 0.003987308213631277, 0.08458358029618485, 0.2463427297217639, 0.26463834002675196, 0.21224618026791833]

我会如何做一个函数,从取加权平均数字findWeightSpeed()并用它来重量的圆弧数量在averageAngles()

我用了这个如何计算一组循环数据的平均值? 制作角度平均函数。

非常感谢您提供的任何建议。

清湖地图图片

1 个回复

这是我在网上找到的一个链接,它解释了整个过程。

计算风速和风向的加权平均值

代码与此类似。

function weightAllData(xPos,yPos,windData){
                var uVecSum = 0;
                var vVecSum = 0;
                var arrayWeightSpeed = findWeightSpeed(xPos, yPos); //using weighted interpolation based on distance
                var arrayWindSpeed = [WSData];
                var arrayWindDirection = [WDData];
                for(var m=0;m<7;m++){
                    uVecSum = uVecSum + (arrayWeightSpeed[m] * getUVector(arrayWindSpeed[m],(arrayWindDirection[m]/180)*Math.PI));
                    vVecSum = vVecSum + (arrayWeightSpeed[m] * getVVector(arrayWindSpeed[m],(arrayWindDirection[m]/180)*Math.PI));
                }

                var weightWS = Math.sqrt(Math.pow(uVecSum,2)+Math.pow(vVecSum,2));
                if(vVecSum!=0){
                    weightWDRad = Math.atan(uVecSum/vVecSum);
                }
                if(vVecSum==0){
                    weightWDRad = Math.atan(uVecSum/(0.0001+vVecSum));
                }
                if(weightWDRad<0){
                    weightWDRad = weightWDRad + Math.PI
                }
                weightWD = (weightWDRad * (180/Math.PI));
}

如果您需要解释,请告诉我

1 使用插值法在 4 个点之间的曲线

我有 4 个已知点,我试图通过这些点来运行平滑曲线。 这是我的输出: 插值时缺少一点。 有人可以帮我强迫它通过这一点吗? 除了使用样条插值之外,还有没有更好的方法来做到这一点? 编辑:曲线必须是单个连接的环。 谢谢! ...

3 在熊猫中使用用户插值法

我有一个喜欢的局部单调性精确样条。 我为此编写的代码遵循api ynew = f(x,y,xnew),但是可以很容易地将其组合到基于类的scipy.interpolate api中。 是否可以使用用户指定的插值器,但可以利用熊猫的准备和实现? 例如,以scipy.interpolate ...

5 使用双三次插值法填充矩阵的边界

我有一个尺寸为28x22的矩阵。 第一行,最后两行,第一列和最后两列(用红色和绿色标记)为空。 这些列和行应该由双三次插值填充。 我已经在SO和Internet上阅读了几篇关于三次三次插值的文章,但不幸的是,我听不懂。 此外,我读到三次三次插值需要了解需要插值的像素周围的4x4网格。 ...

7 (Oracle) 使用插值法获得第 25 个数字

我的目标是获得第 25 个数字。 例如我有 4 行,例如 3,4,5 和 7。我的目标是获得 1.25th(=(4+1) 0.25)。 预期结果为 3.25,这是通过插值 (3+0.25 (4-3)) 获得的。 我试过如下。 但是还有其他有效的方法吗? ...

8 使用插值法在曲面上重复色标

我正在尝试使用一系列颜色为表面着色,以实现某些视觉效果。 一种效果是从一种颜色到另一种颜色的渐变。 假设我有一个带有黑色和白色纹理像素的查找纹理。 通过选择颜色序列的[0,1],将颜色应用于整个表面。 线性插值创建一个不错的渐变。 现在,我要重复该顺序。 直观地讲,我想使用[0,2] ...

9 拉格朗日插值法

我使用卷积和for循环(for循环太多)来使用Lagrange's method计算插值,这是主要代码: 对于用于计算l_i(x)循环而言,这些太多了(这是在最后一次计算P_n(x) = Sigma of y_i * l_i(x)之前完成的)。 有什么建议可以使其更加正式吗? ...

10 PIL 双三次插值法

所以,我有一个形状的 ndarray: (28, 28, 1)并且我想使用双三次插值将它放大到(33, 33, 1) 。 以下是我在网上搜索得到的: 但我不断收到错误消息: 回溯(最近一次调用最后一次): 文件“filters.py”,第 256 行,在可视化层(mnist,LAYER_N ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM